RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1411972
Accepted
Parcurcik
Parcurcik
Asked:2022-07-20 19:32:17 +0000 UTC2022-07-20 19:32:17 +0000 UTC 2022-07-20 19:32:17 +0000 UTC

如何通过神经网络从相机运行帧?

  • 772

如何通过神经网络(函数)从网络摄像头(函数camera_on,
以及)“传递”帧?control_timernetwork

class PredictNumber:
    face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')

    def network(self, image_video):
        ret, frame = image_video.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        plaques = face_cascade.detectMultiScale(gray, 1.3, 5)
        for i, (x, y, w, h) in enumerate(plaques):
            roi_color = frame[y:y + h, x:x + w]
            r = 400.0 / roi_color.shape[1]
            dim = (400, int(roi_color.shape[0] * r))
            resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
            w_resized = resized.shape[0]
            h_resized = resized.shape[1]
            frame[100:100 + w_resized, 100:100 + h_resized] = resized
        return resized 
    def camera_on(self):
        ret, image = self.cap.read()
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        height, width, channel = image.shape
        step = channel * width
        img = QImage(image.data, width, height, step, QImage.Format_RGB888)
        image_video = PredictNumber.network(self, img) 
# Таким образом не работает, 
происходит вылет программы.
        self.ui.Cam.setPixmap(QPixmap.fromImage(image_video))
        self.ui.Cam.setScaledContents(True)

    def control_timer(self):
        if not self.timer.isActive():
            self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
            self.timer.start(0)

UPD:重写并将相机移动到单独的类

为了避免将格式从 cv 转换为 QT image,我这样做了,添加了级联,但程序仍然崩溃:

class Worker1(QThread):
    ImageUpdate = pyqtSignal(QImage)
    face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')
    def run(self):
        self.ThreadActive = True
        Capture = cv2.VideoCapture(0)
        while self.ThreadActive:
            ret, frame = Capture.read()
            if ret:
                image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                flipped_image = cv2.flip(image, 1)
                with_cascade = faceCascade.detectMultiScale(flipped_image, 1.3, 7)
                for (x, y, w, h) in with_cascade:
                    roi_color = ret[y:y + h, x:x + w]
                    r = 300.0 / roi_color.shape[1]
                    dim = (400, int(roi_color.shape[0] * r))
                    resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
                convert_to_qt_format = QImage(resized.data, resized.shape[1], fresized.shape[0], QImage.Format_RGB888)
                self.ImageUpdate.emit(convert_to_qt_format)

在这里,该类被初始化,并在按下按钮时启动。

        self.Worker1 = Worker1()
        self.Worker1.ImageUpdate.connect(self.image_update_slot)
        self.ui.Camera_btn.clicked.connect(self.Worker1.start)

这是一个用于更新相机的插槽。最后一行根据小部件制作相机大小

    def image_update_slot(self, Image):
        self.ui.Cam.setPixmap(QPixmap.fromImage(Image))
        self.ui.Cam.setScaledContents(True)
python
  • 2 2 个回答
  • 59 Views

2 个回答

  • Voted
  1. Alexander Chernin
    2022-07-21T14:49:50Z2022-07-21T14:49:50Z

    很明显,它不起作用 - 您传输 type 的数据QImage,但将其处理为VideoCapture(?)

    你需要做这样的事情:

    class PredictNumber:
        face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')
    
        def network(self, image):
            # QImage в cv::Mat  
            frame = Mat(image.height(), image.width(), <тип данных из cv, который соответствует QImage.Format_RGB888>...)
    
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            plaques = face_cascade.detectMultiScale(gray, 1.3, 5)
            for i, (x, y, w, h) in enumerate(plaques):
                roi_color = frame[y:y + h, x:x + w]
                r = 400.0 / roi_color.shape[1]
                dim = (400, int(roi_color.shape[0] * r))
                resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
                w_resized = resized.shape[0]
                h_resized = resized.shape[1]
                frame[100:100 + w_resized, 100:100 + h_resized] = resized
            return resized 
    

    如果它不起作用,请按照此处Mat(image....)的说明尝试

    • 1
  2. Best Answer
    S. Nick
    2022-07-21T19:39:31Z2022-07-21T19:39:31Z

    尝试替换类Worker1:

    class Worker1(QThread):
        ImageUpdate = pyqtSignal(QImage)
        
        def __init__(self, *args, **kwargs): 
            super().__init__()
            self.ThreadActive = True
            self.cam = cv2.VideoCapture(0)    
        
        def run(self):
            while self.ThreadActive:
    # --------> vvvvvvvvvvvv
                face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')
                ret, frame = self.cam.read()                      # Capture.read()
                if ret:
                    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                    flipped_image = cv2.flip(image, 1)
    # ---------------------------> ???????????                
    #                with_cascade = faceCascade.detectMultiScale(flipped_image, 1.3, 7)
    # ---------------------------> vvvvvvvvvvvv                 
                    with_cascade = face_cascade.detectMultiScale(flipped_image, 1.3, 7)
                    
                    for (x, y, w, h) in with_cascade:
                        roi_color = ret[y:y + h, x:x + w]
                        r = 300.0 / roi_color.shape[1]
                        dim = (400, int(roi_color.shape[0] * r))
                        resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
                    convert_to_qt_format = QImage(resized.data, resized.shape[1], fresized.shape[0], QImage.Format_RGB888)
                    self.ImageUpdate.emit(convert_to_qt_format)
                    
    
    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5