OrangePi AIpro测评体验-Yolov5、OCR模型体验
OrangePi AIpro测评体验-Yolov5、OCR模型体验 非常荣幸受官方邀请体验OrangePi AIpro,本文介绍OrangePi AIpro测评Yolov5目标检测/OCR模型整个过程,并在OCR实例代码的基础上增加了摄像头检测的功能。总体来说OrangePi AIpro非常nice,非常适合部署一些小模型。
OrangePi AIpro测评体验-Yolov5、OCR模型体验
非常荣幸受官方邀请体验OrangePi AIpro,本文介绍OrangePi AIpro测评Yolov5目标检测/OCR模型整个过程,并在OCR实例代码的基础上增加了摄像头检测的功能。总体来说OrangePi AIpro非常nice,非常适合部署一些小模型。
一、OrangePi AIpro介绍
作为业界首款基于昇腾深度研发的AI开发板,OrangePi AIpro无论在外观上、性能上还是技术服务支持上都非常优秀。采用昇腾AI技术路线,集成图形处理器,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出,8/20 TOPS AI算力。
其丰富的接口更是赋予了OrangePi AIpro强大的可拓展性。包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB、两个MIPI摄像头、一个MIPI屏等,预留电池接口。
在操作系统方面,OrangePi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求,可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。
在本次测评中OrangePi AIpro的配置为:8GB/16GB LPDDR4X,外接32GB eMMC模块,支持双4K高清输出,8 TOPS AI算力。
二、开机
经过数天的等待,终于到货啦~~,打开快递,实物如下图(包含一个电源线、电源插头以及OrangePi AIpro开发板):
因为是裸板,所以接上了鼠标、键盘、网线、显示器、电源,先通电看下效果,鼠标和键盘接了2个USB接口,显示器接HDMI0接口,插上网线和电源线:
开机的一瞬间,风扇呜呜呜的转了起来(一开始风扇转的很猛,有点吓人,进入系统就好了),我的显示器是27寸,成功亮了起来,进入系统(系统发来的时候是ubuntu22.04):
进入系统,打开终端,输入命令ip a,查看ip地址是192.168.1.177,然后记下ip地址,把显示器接回我的电脑,后续操作远程进行。
三、远程连接
因为习惯用vscode开发,所以在自己电脑上用vscode远程连接OrangePi AIpro进行测试,使用vscode的ssh连接OrangePi AIpro:
输入密码连接成功:
连接成功之后,输入以下命令查看npu信息:
npu-smi info
如下图所示,显示了版本、内存等信息:
四、Yolov5模型体验
切换到HwHiAiUser用户,打开目录/home/HwHiAiUser/samples:
cd /home/HwHiAiUser/samples
可以看到notebooks里面有很多示例,这是官方已经做好的,下面我们来体验一下。参考教程: https://metaxiaoyu.feishu.cn/docx/CE0bdHxyTocRGFxLoDPcG6I5nJd#tdsub
进入notebooks目录:
cd notebooks/
运行start_notebook.sh脚本:
bash start_notebook.sh
打开这个连接:
进来了,左边是官方的示例代码:
说在前面:OrangePi AIpro不支持onnx推理,所以要先把onnx模型转换为om模型,转换方法参考:https://www.hiascend.com/document/detail/zh/canncommercial/700/quickstart/quickstart/quickstart_18_0007.html
1、图片检测
进入相关目录,并打开jupyter文件:
依次运行代码块,注意,最后一个代码块修改了代码,因为我的OrangePi AIpro没有摄像头:
先看下要检测的图片长什么样:
回去main.ipynb,运行推理代码块:
可以看到代码成功跑通了。
2、视频检测
可以看到代码里面还有个视频,改下代码,用视频试试:
在上面的代码块下面新开一个代码块,把以下内容加上去:
def infer_and_save_video(video_path, model, labels_dict, cfg, output_video='output.avi'): """视频推理""" image_widget = widgets.Image(format='jpeg', width=800, height=600) display(image_widget)
# 读入视频 cap = cv2.VideoCapture(video_path) fourcc = cv2.VideoWriter_fourcc(*'XVID') width = int(cap.get(3)) height = int(cap.get(4)) fps = cap.get(cv2.CAP_PROP_FPS) export_cap = cv2.VideoWriter(output_video, fourcc, fps, (width, height), True) while True: ret, img_frame = cap.read() if not ret: break # 对视频帧进行推理 image_pred = infer_frame_with_vis(img_frame, model, labels_dict, cfg, bgr2rgb=True) export_cap.write(image_pred) # 写入视频 image_widget.value = img2bytes(image_pred) export_cap.release()
video_path = 'racing.mp4' infer_and_save_video(video_path, model, labels_dict, cfg) |
如下图:
运行新加入的代码块,即可在推理结束后得到output.avi:
视频如下:
https://www.bilibili.com/video/BV1Yi421D7ew/?spm_id_from=333.1350.jump_directly
3、摄像头检测
体验了图片和视频检测,那肯定不能缺了摄像头检测,把不知道不知道多久前买的摄像头安排上:
把代码模式改成摄像头模式,并运行代码,成功运行,而且效果非常好,达到了实时:
五、OCR模型体验
说在前面:OrangePi AIpro不支持onnx推理,所以要先把onnx模型转换为om模型,转换方法参考:https://www.hiascend.com/document/detail/zh/canncommercial/700/quickstart/quickstart/quickstart_18_0007.html
接下来进入ocr目录,测试一下ocr的效果:
一直运行代码,就可以跑出如下的效果,但是示例只给出了检测图片,把他扩展到摄像头检测:
OCR摄像头检测的代码在下面:
if not os.path.exists('infer_result'): os.makedirs('infer_result') ans = {} import ipywidgets as widgets import numpy as np def img2bytes(image): """将图片转换为字节码""" return bytes(cv2.imencode('.jpg', image)[1])
def find_camera_index(): max_index_to_check = 10 # Maximum index to check for camera
for index in range(max_index_to_check): cap = cv2.VideoCapture(index) if cap.read()[0]: cap.release() return index
# If no camera is found raise ValueError("No camera found.")
# 获取摄像头 camera_index = find_camera_index() cap = cv2.VideoCapture(camera_index) # 初始化可视化对象 image_widget = widgets.Image(format='jpeg', width=1280, height=720) display(image_widget) while True: # 对摄像头每一帧进行推理和可视化 _, img_src = cap.read() # image_pred = infer_frame_with_vis(img_frame, model, labels_dict, cfg) # basename = os.path.basename(IMAGE_PATH)
image_h, image_w = img_src.shape[:2]
det_input_tensor = det_model.preprocess(img_src)
output = det_model.infer(det_input_tensor)
bboxes = det_model.postprocess(output) # im = Image.open(IMAGE_PATH) im = Image.fromarray(img_src) draw = ImageDraw.Draw(im) ans['image_name'] = basename ans['result'] = [] for bbox in bboxes: bbox_detail = {} x1 = int(bbox[0] / det_model.model_width * image_w) y1 = int(bbox[1] / det_model.model_height * image_h) x2 = int(bbox[2] / det_model.model_width * image_w) y2 = int(bbox[3] / det_model.model_height * image_h) draw.line([(x1, y1), (x1, y2), (x2, y2), (x2, y1), (x1, y1)], fill='red', width=2) bbox_detail['bbox'] = [x1, y1, x1, y2, x2, y2, x2, y1] res = ','.join(map(str,bbox_detail['bbox'])) print(f'det result: {res}') crop_img = img_src[y1:y2, x1:x2]
rec_input_tensor = rec_model.preprocess(crop_img) rec_output = rec_model.infer(rec_input_tensor) bbox_detail['text'] = rec_model.postprocess(rec_output) print(f'rec result: {bbox_detail["text"]}') ans['result'].append(bbox_detail)
image_widget.value = img2bytes(np.array(im)) cap.release() |
把代码放到jupyter文件中运行(因为有些摄像头比较古老,而且这本书有点反光,图片质量不行),下面是运行截图,准确率还是挺不错的,但是非常卡顿:
图片分辨率是576x960,识别结果如下图:
OCR识别需要先检测图片中所有文本块的位置,然后分别裁剪下来送入识别模型进行识别,每个图片需要处理的时间比较长,OrangePi AIpro的算力有点捉襟见肘。
六、总结
1、从官方提供的示例代码中的检测结果来看,视频非常流畅,从onnx模型可以看到YOLOV5目标检测图片分辨率是640x640,这个分辨率下能有这个表现,很惊艳;
2、可能以前都没怎么接触过边缘部署的原因,总是主观认为没有GPU很难在工业场景下达到实时检测的同时保持好的检测效果,但是OrangePi AIpro给我的感觉是可以,个人觉得OrangePi AIpro会在工业场景下有非常亮眼的表现;
3、对于示例代码中的OCR模型来说算力有点捉襟见肘,后续如果时间充足会考虑部署一些小的OCR模型进行测试。
更多推荐
所有评论(0)