python - 在pyqt上流式传输opencv视频时它可以工作,但是为什么在使用dlib编写代码时它不起作用?
问题描述
class Thread(QThread):
imageUpdate = pyqtSignal(QImage)
def run(self):
#self.ThreadActive = True
self.cap = cv2.VideoCapture('D:/Human_Pose_Estimation/test.mp4')
self.detector = dlib.get_frontal_face_detector()
self.sp = dlib.shape_predictor('models/shape_predictor_68_face_landmarks.dat')
self.facerec = dlib.face_recognition_model_v1('models/dlib_face_recognition_resnet_model_v1.dat')
self.descs = np.load('img/descs.npy',allow_pickle=True)[()] # ,allow_pickle=True
while self.cap.isOpened():
ret, img = self.cap.read()
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dets = self.detector(img, 1)
for k, d in enumerate(dets):
shape = self.sp(img, d)
face_descriptor = self.facerec.compute_face_descriptor(img, shape)
last_found = {'name': 'unknown', 'dist': 0.6, 'color': (0,0,255)}
for name, saved_desc in self.descs.items():
dist = np.linalg.norm([face_descriptor] - saved_desc, axis=1)
if dist < last_found['dist']:
last_found = {'name': name, 'dist': dist, 'color': (0,255,0)}
cv2.rectangle(img, pt1=(d.left(), d.top()), pt2=(d.right(), d.bottom()), color=last_found['color'], thickness=2)
cv2.putText(img, last_found['name'], org=(d.left(), d.top()), fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1, color=last_found['color'], thickness=2)
class Ui_Form(object):
def setupUi(self, Form):
[...]
self.Thread = Thread()
self.Thread.start()
self.Thread.imageUpdate.connect(self.imageUpdateslot)
def imageUpdateslot(self, image):
self.label.setPixmap(QPixmap.fromImage(image))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
在pyqt上流式传输opencv视频时它可以工作,但是为什么在使用dlib编写代码时它不起作用?
The above code does not show errors
,但只操作主设置Ui,不操作opencv webcam和dlib。我应该怎么办?
解决方案
推荐阅读
- java - 如何为以下布局制作自定义视图?
- angular - 带路由的 Angular Sidenav 上的 Jasmine 测试
- typescript - Typescript 从外部根目录导入代码,编译到文件夹
- java - 操作图标未出现在工具栏中
- docker - 使用基于 url 的 Nginx 重定向
- node.js - 将外部 REST API 与 ReactJS 和 NodeJS 一起使用
- javascript - Turf.js pointsWithinPolygon 适用于 Polygon 但不适用于 FeatureCollection
- spring - Spring 状态机 - 变量在操作中为空
- wordpress - WooCommerce 订阅插件 - 自定义发票期
- reactjs - 如何彻底清除一个redux store?浏览器后退按钮恢复存储