跳到主要内容

计算机视觉实验

1. 实验环境搭建

1.1 软件包下载

vision_experiment.tar.gz

1.2 安装依赖

tar xzvf vision_experiment
cd vision_experiment
sudo apt update && sudo apt upgrade -y
sudo apt install libopencv-dev
sudo apt-get install -y python3-opencv autoconf automake libopenblas-dev curl k1x-vpu-firmware mpp ffmpeg jupyter-notebook jupyter portaudio19-dev python3-pyaudio

2. 计算机视觉实验

2.1 目标检测实验

目标检测实验使用的是yolov11模型,是最新的yolo系列的模型。

2.1.1 相关代码

import py_dep_cfg
import yolov8 as yolo
import cv2
import json

# 设置模型路径
infer = yolo.create_infer('models/yolo11n.onnx',"onnx")
# 设置图片路径
image = cv2.imread("test_data/default_yolo_1.1f868dbe.png")

labels = []

with open("yolo_label.txt", 'r') as file:
for line in file:
label = line.strip()
labels.append(label)

objects = infer.commit(image).get()

# 后处理
for Box in objects:
objects_dict = json.loads(Box.json_info.text)
for bbox_info in objects_dict:
prob = bbox_info['prob']
label = labels[bbox_info['label']]
x, y, width, height = bbox_info['x'], bbox_info['y'], bbox_info['width'], bbox_info['height']

left = int(x * image.shape[1])
top = int(y * image.shape[0])
right = int((x + width) * image.shape[1])
bottom = int((y + height) * image.shape[0])

cv2.rectangle(image, (left, top), (right, bottom), (0,255,0), 2)

label_text = f'{label} ({prob:.2f})'

(text_width, text_height), baseline = cv2.getTextSize(label_text, cv2.FONT_HERSHEY_SIMPLEX, 0.6, 1)

cv2.rectangle(image, (left, top - text_height - baseline), (left + text_width, top), (0,255,0), -1)

cv2.putText(image, label_text, (left, top - baseline), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 1, cv2.LINE_AA)

# 保存结果
cv2.imwrite("yolo_result.png",image)
print ("inference completion!\n")

2.1.2 执行流程

python yolo_demo.py

图 2.1.2.1 目标检测正确执行结果

结果保存为yolo_result.png。


图 2.1.2.2 目标检测正确执行结果

2.2 图像分类实验

图像分类使用的是mobilenetv2模型,是非常经典的移动端卷积类模型。

2.2.1 相关代码

import py_dep_cfg
import Classifi as cls
import cv2

# 设置模型路径
infer = cls.create_infer('models/mobilenet_v2.q.onnx',"onnx")
# 设置图像路径
image = cv2.imread("test_data/cat_224x224.jpg")

image = cv2.resize(image,(224,224))
objects = infer.commit(image).get()

for text in objects:
print("text_line:", text.text)

print("inference completion!\n")

2.2.2 执行流程

$ python classifi_demo.py

图 2.2.2 图像分类正确执行结果

分类结果如图所示,cls为类别,value为概率。

2.3 关键点实验

关键点使用的是superpoint模型,是一个资源需求小,又有不错效果的关键点模型。

2.3.1 相关代码

import py_dep_cfg
import ObjectSuperpoint as Superpoint
import cv2
import json

# 设置图片路径
image_path = "test_data/default_superpoint_2.930391fa.png"
# 设置模型路径
infer = Superpoint.create_infer('models/superpoint_512_480x640.onnx')
image_gray = cv2.imread(image_path,0)
image = cv2.imread(image_path)

objects = infer.commit(image_gray).get()

for obj in objects:
obj_dict = json.loads(obj.json)
for item in obj_dict:
x = int(image.shape[1]*item['x'])
y = int(image.shape[0]*item['y'])
cv2.circle(image, (x, y), 1, (0, 0, 255), thickness=4)

cv2.imwrite("superpoint_result.png", image)
print("inference completion!\n")

2.3.2 执行流程

python superpoint_demo.py

图 2.3.2.1 关键点正确执行结果

结果保存为superpoint_result.png。


图2.3.2.2 superpoint_result.png

2.4 图像分割实验

图像分割使用的是seaformer模型,是一个参数比较小,效果比较好的分割模型。

2.4.1 相关代码

import py_dep_cfg
import ObjectMask as mask
import cv2

# 设置模型路径
infer = mask.create_infer('models/model_627_new.onnx')
# 设置图像路径
image = cv2.imread('test_data/camera0_185836_0130.jpg')

objects = infer.commit(image).get()
for idx, obj in enumerate(objects):
cv2.imwrite(f"py_mask_{idx}.bmp",obj.data)

print ("inference completion!\n")

2.4.2 执行流程

python seaformer_demo.py

图2.4.2.1 图像分割正确执行结果

结果保存为py_mask_{idx}.bmp


图2.4.2.2 py_mask_0.bmp

2.5 手写字体识别实验

手写字体使用是的PPOCR模型,是一个非常受欢迎的手写字体模型。

2.5.1 相关代码

import py_dep_cfg
import PPOCRRec as ocr
import cv2

infer = ocr.create_infer('models/ppocrv4_rec_new.onnx')
image = cv2.imread('test_data/default_ocr_1.e360298e.png')

objects = infer.commit(image).get()
for text_line in objects:
print("text_line:", text_line.json)

print ("inference completion!\n")

2.5.2 执行流程

python ocr_demo.py

图2.5.2 手写字体识别正确执行结果

结果在终端显示,结果为“text”后面的字段。