Files
ai-titration/vid_chk.py
flt6 e0e1c649eb clean and format codebase
Former-commit-id: 5d0497ac67199a7ea475849a6ec3f28df46371cb
2025-07-07 18:52:50 +08:00

68 lines
1.5 KiB
Python

import cv2
import numpy as np
import ch340
flag = False
vidId = 1
cap = cv2.VideoCapture(vidId, cv2.CAP_DSHOW)
while not flag:
suc, im = cap.read()
cv2.imshow("image", im)
k = cv2.waitKey(0)
if k & 0xFF == ord("q"):
# cap.release()
# cv2.destroyAllWindows()
flag = True
else:
vidId += 1
cap.release()
cap.open(vidId, cv2.CAP_DSHOW)
print(f"使用摄像头索引: {vidId}")
base = 30
pump = ch340.CH340()
while True:
suc, im = cap.read()
hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
s = hsv[:, :, 1]
mask = s > base
cv2.imshow("mask", im * mask[:, :, np.newaxis])
tot = mask.shape[0] * mask.shape[1]
val = np.sum(mask)
rate = val / tot
thr = (0.05, 0.2, 0.5)
ret = ""
if rate < thr[0]:
ret = "transport"
elif rate < thr[1]:
ret = "middle"
elif rate < thr[2]:
ret = "about"
else:
ret = "colored"
im = cv2.putText(
im,
f"Rate: {rate:.2},base={base},{ret}",
(10, 30),
cv2.FONT_HERSHEY_SIMPLEX,
1,
(0, 255, 0),
2,
)
cv2.imshow("image", im)
k = cv2.waitKey(1)
if k & 0xFF == ord("w"):
base += 1
elif k & 0xFF == ord("s"):
base -= 1
elif k & 0xFF == ord("a"):
pump.push_async(speed=0.1, vol=0.1)
elif k & 0xFF == ord("q"):
print("Camera index = ", vidId)
print("k =", base)
cap.release()
cv2.destroyAllWindows()
break