之前的内容我们成功调用了摄像头并调用opencv库函数,实现手机摄像头的是实时边缘检测,使用canny边缘检测提取图像边缘特征,当然还能实现更为复杂的函数功能。
经过前两次的学习已经掌握了环境配置和基本图像处理功能应用,接下来我们便进入该课程的主要部分,深度学习模型部署实战课程,实现自己的分类模型部署实战。
然后我们根据第三节图像分类模型部署,打开notebook依次运行其中ipynb文件,安装好其中的onnx工具包,熟悉其中的部署代码,让案例他们能够运行起来。
调用手机摄像头图像成功分类出圆珠笔,并在频幕上显示出分类类别与概率,如下图所示。
熟悉完相关函数调用后我们训练自己的分类数据集,为了便于演示,身边简单的3类水果分类数据集采集(西红柿,苹果,桃子),并将训练好的模型转换成onnx格式的模型。不懂模型训练和转换的可以参考@同济子豪兄的视频连接进行学习模型训练和转换。
将转换好的onnx文件上传到Aldiux种并进行测试。
导入上传的onnx,修改文件路径,将调用摄像头分类检测代码,即可在手机端运行摄像头进行实时检测,手机上显示检测的结果和检测处理时间。整合后的代码如下:
import cv2
import numpy as np
import time
from tqdm import tqdm
def generate_video(input_path='videos/fruit.mp4'):
filehead = input_path.split('/')[-1]
output_path = "out-" + filehead
print('视频开始处理',input_path)
# 获取视频总帧数
cap = cv2.VideoCapture(input_path)
frame_count = 0
while(cap.isOpened()):
success, frame = cap.read()
frame_count += 1
if not success:
break
cap.release()
print('视频总帧数为',frame_count)
# cv2.namedWindow('Crack Detection and Measurement Video Processing')
cap = cv2.VideoCapture(input_path)
frame_size = (cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
# fourcc = cv2.VideoWriter_fourcc(*'XVID')
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
fps = cap.get(cv2.CAP_PROP_FPS)
out = cv2.VideoWriter(output_path, fourcc, fps, (int(frame_size[0]), int(frame_size[1])))
# 进度条绑定视频总帧数
with tqdm(total=frame_count-1) as pbar:
try:
while(cap.isOpened()):
success, frame = cap.read()
if not success:
break
# 处理帧
# frame_path = './temp_frame.png'
# cv2.imwrite(frame_path, frame)
try:
frame = process_frame(frame)
except:
print('报错!', error)
pass
if success == True:
# cv2.imshow('Video Processing', frame)
out.write(frame)
# 进度条更新一帧
pbar.update(1)
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
except:
print('中途中断')
pass
cv2.destroyAllWindows()
out.release()
cap.release()
print('视频已保存', output_path)
修改视频传入方式,调用手机摄像头,调用该函数便可在手机端显示实时处理画面。显示效果如下所示。
视频链接:https://www.bilibili.com/video/BV1Qh4y1r7aD?t=9.0
经过几次的学习已经掌握了相关的深度学习模型部署的相关步骤,当然我们可以进行更深一步的学习,包括图像检测,图像分割等等视觉任务的部署。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。