Python + Opencv читает проблему с USB-камерой с высокой частотой кадров
Python + Opencv читает проблему с USB-камерой с высокой частотой кадров

Я несколько раз использовал Python+Opencv для сбора данных с веб-камер и USB-камер. Основной процесс был пройден, и серьезных проблем не возникло. В недавнем проекте использовалась USB-камера со скоростью 120 кадров в секунду, но после отладки и запуска кода возникла проблема.

Возникшие проблемы

120 кадров в секунду, можно читать только более 30 изображений одновременно или максимум менее 40 изображений. Он просто не соответствует требованиям.

Код для начала

Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding: cp936 -*-
"""
Author:NoamaNelson
Date:2019-11-19
Discription:Read Camaro picture and save 
"""

import cv2,os,time
import numpy as np

class CamaroCap(object):

    """ Открыть видеопоток """
    def __init__(self):

        self.cap = cv2.VideoCapture(0) 

    """ Печать информации о изображениях """      
    def get_image_info(self,image):
        print(type(image))
        print(image.shape)
        print(image.size)
        print(image.dtype)
        pixel_data = np.array(image)
        print(pixel_data)

    """ Считайте данные кадр за кадром и сохраните изображение в локальном месте. """
    def Camaro_image(self):
        i = 0
        while(True):
            ret,frame = self.cap.read() #ret: True или False, указывает, было ли изображение прочитано. Frame: указывает, что кадр изображения был перехвачен;
            if ret == False:
                break
            
            self.get_image_info(frame) # print("Распечатать информацию об изображении") Примечание. Его можно включить во время отладки. Если программа работает всегда, рекомендуется закомментировать эту строку, чтобы не влиять на использование памяти.          
            
            cv2.imshow('capture',frame) # Показать изображения
            
            cv2.imwrite(r"D:\image\\"+ str(i) + ".jpg",frame)  # сохранить изображение
            i = i + 1

            if cv2.waitKey(1) & 0xFF == ord('q'): # 
                break

if __name__ == '__main__':

    outmasages = CamaroCap() 
    
    outmasages.Camaro_image() # позвонить на камеру
    
    outmasages.cap.release() # Освободите объекты и уничтожьте окна
    cv2.destroyAllWindows()
    

Анализ проблемы

  • Автор нашел,Каждый раз настраивайте параметры в программе управления камерой,Например, настройки разрешения800600, но после запуска кода все равно 640480,why?why?
  • Камера работает с разрешением 640*480.,Поддержка 120 кадров в секунду,Автор ограничил в коде частоту кадров до 60 кадров в секунду.,Но все же можно получить только более 30 изображений в секунду.,Почему? почему?
Язык кода:python
кодКоличество запусков:0
копировать
self.cap.set(cv2.CAP_PROP_FPS, 60)
  • Я начал просить о помощи в Интернете, много искал в Интернете и наконец увидел надежду.
  • Оказывается, вышеуказанная проблема заключается в,Ссылка на блоггераАвтор использовал выводы анализаUSBкамера,Также поддерживает формат кодирования видео YUY2/MJPG.,Но Opencv по умолчанию читает YUY2.,Автор проверил на ПО управления камерой,Максимальная частота кадров при различных разрешениях в формате YUY2 составляет всего 40 кадров.,Тогда это верно,Теперь вы знаете, почему картинок всегда 30-40. Потом нужно в скрипте поменять формат на MJPG,Как вы можете видеть из приведенной выше ссылки блоггера:
image.png
image.png
  • Если вы хотите изменить разрешение, вы должны использовать:
Язык кода:python
кодКоличество запусков:0
копировать
CAP_PROP_FRAME_WIDTH и CAP_PROP_FRAME_HEIGHTСделайте настройки широкимиивысокий
  • Чтобы изменить формат на кодировку MJPG, необходимо использовать:
Язык кода:python
кодКоличество запусков:0
копировать
CV_CAP_PROP_FOURCC
  • Затем вам нужно добавить:
Язык кода:python
кодКоличество запусков:0
копировать
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
#self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))

Измененный код

Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding: cp936 -*-

"""
Author:zhangbo
Date:2019-11-07
Discription:Read Camaro picture and save 
"""

import cv2,os,time,datetime
import numpy as np

class CamaroCap(object):

    """ Открыть видеопоток """
    def __init__(self):
        
        self.cap = cv2.VideoCapture(0)
        #self.cap.set(cv2.CAP_PROP_FPS, 120) Иногда это работает, иногда не работает, не знаю почему.
        self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
        self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
        self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))

    
    """ Печать информации о изображениях """      
    def get_image_info(self,image):
        print(type(image))
        print(image.shape)
        print(image.size)
        print(image.dtype)
        pixel_data = np.array(image)
        print(pixel_data)


    """ Считайте данные кадр за кадром и сохраните изображение в локальном месте. """
    def Camaro_image(self):
        i = 0
        while(True):
            ret,frame = self.cap.read() #ret: True или False, указывает, было ли изображение прочитано. Frame: указывает, что кадр изображения был перехвачен;
            if ret == False:
                break
            
            #self.get_image_info(frame) # print("Распечатать информацию об изображении") Примечание. Его можно включить во время отладки. Если программа работает всегда, рекомендуется закомментировать эту строку, чтобы не влиять на использование памяти.          
            
            cv2.imshow('capture',frame) # Показать изображения

            mtime = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
            print(mtime)
            
            cv2.imwrite(r"D:\image\\" + str(i) + str("-") + mtime + ".jpg",frame)  # сохранить изображение
            i = i + 1

            if cv2.waitKey(1) & 0xFF == ord('q'): 
                break
                
if __name__ == '__main__':

    outmasages = CamaroCap() 
    
    outmasages.Camaro_image() # позвонить на камеру
    
    outmasages.cap.release() # Освободите объекты и уничтожьте окна
    cv2.destroyAllWindows()
    
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose