大概思路
我们可以想象一下如果我们利用相同像素的相机进行数据采集,那么我们站在距离摄像机固定远的位置我们所占的像素大小也是基本不变的。
利用这个规律我们可以知道一个人在图像中所占像素大小,并根据所占像素大小来计算这个人的身高。
代码实现
我们首先需要读取摄像头
1 2 3 4 5 6
| camera = cv2.VideoCapture(0) while True: k = cv2.waitKey(1) ret, img0 = camera.read() cv2.namedWindow('camera') cv2.imshow('camera', img0)
|
定义一个测量身高的函数,并测量标准值(需要你站在里摄像头正前方1米处测量自己纵向占多少像素,再用你的身高除以这个像素大小,就可以得到标准值)
1 2 3 4 5 6 7 8
| def height_detect(xywh_list, height): _, _, _, h = xywh_list[0] std = '' h *= height h *= std return h
|
然后我们调用yolov5的检测函数进行图像检测,详见[重构yolov5-6-0-detect-py进行目标检测](重构yolov5-6.0 detect.py进行目标检测 | 后花园 (pipi0960.github.io))
最后利用main函数将程序连通起来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| model, device, half, stride, names, imgsz = get_model() camera = cv2.VideoCapture(0)
while True: ret, img0 = camera.read() if ret: img0 = np.array(img0) img0 = cv2.cvtColor(img0, cv2.COLOR_BGRA2BGR) img, xywh_list = out_img(img0, model, device, half, stride, names, imgsz) if xywh_list: print(height_detect(xywh_list, 相机y轴总像素大小)) cv2.imshow('camera', img) img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR) cv2.imshow('窗口名称', img) k = cv2.waitKey(1) if k % 256 == 27: exit('程序已结束')
|
效果展示