Cámara con controlador de biblioteca de cámara USB QT integrada

Tabla de contenido

Prefacio

Editar 

1. Compilación cruzada de ffmpeg

 1.1 Primero obtenga el paquete comprimido de ffmpeg

1.2 Copie el código fuente de ffmpeg a la máquina virtual y descomprima el paquete comprimido 

1.3 Después de la descompresión, debemos ingresar el archivo descomprimido y compilarlo en una biblioteca. 

1,5 hacer 

1.6 hacer instalación

2.uso de la biblioteca usbcame 

  2.1 Obtenga la biblioteca usbcame y descomprímala

 2.2 Una vez completada la descompresión, ingresamos a la carpeta ussbcamer y veremos que hay dos carpetas que incluyen include y lib.

 2.3 Copie la inclusión en ffmpeg compilada en el capítulo anterior a la inclusión en usbcamera

2.4 Copie la biblioteca en ffmpeg a la biblioteca en usbcamera

2.5 Agregar la biblioteca usbcamera a nuestro proyecto 

3.La clase Qwidget mejora USBCameraWidget

 3.1 Haga clic derecho en el Qwidget que desea actualizar y haga clic en Actualizar a:

3.2 Luego necesitamos encontrar el nombre de la clase que queremos mejorar y copiarlo. USBCameraWidget también hereda la clase principal de Qwidget:  

4. compilar 

4.1 Compilación

 4.2 Ocurren los siguientes problemas 

4.3 Errores de salida de la aplicación 

5. Uso de la cámara 

  5.1 Inicialización de la cámara

5.2 Tomar fotografías 

5.3 Mostrar etiquetas


Prefacio

   ¿Por qué no utilizar la clase de cámara propia de QT en lugar de utilizar la clase de cámara usb? Porque ahora se utilizan la mayoría de las cámaras UVC del mercado , porque las cámaras UVC son económicas y fáciles de usar ; se requiere una instalación sin controladores ; el cableado de hardware es pequeño y la interfaz USB es muy versátil. UVC es un protocolo de cámara . Las cámaras USB básicamente usan el protocolo UVC . Muchos comerciantes dicen que la cámara está "sin controlador". En realidad, no está libre de controlador. Es solo que el sistema viene con el controlador UVC , por lo que se atreven a diga "sin controlador".. Debido a que las cámaras UVC son muy, muy, muy utilizadas, muchos sistemas tienen controladores UVC integrados .

La biblioteca usbcamera requiere el soporte de ffmpeg ; es muy adecuada para operar cámaras UVC ; es más conveniente que la clase QCamera que viene con Qt .

 

1. Compilación cruzada de ffmpeg

 1.1 Primero obtenga el paquete comprimido de ffmpeg

1.2 Copie el código fuente de ffmpeg a la máquina virtual y descomprima el paquete comprimido 

sudo tar -xf ffmpeg-3.4.5.tar.gz

1.3 Después de la descompresión, debemos ingresar el archivo descomprimido y compilarlo en una biblioteca. 

cd ffmpeg-3.4.5/

Luego abra el documento en la captura de pantalla anterior que contiene el método de compilación. Este es el método de compilación para sistemas de 32 bits.

 

1.4 Compile el código fuente (sistema de 32 bits), pero el comando para configurar el código fuente debe modificarse de acuerdo con nuestro propio compilador, rodeamos los lugares que deben modificarse:

 

El compilador cruzado que uso es arm-cortexa9-linux-gnueabihf- . Por lo que es necesario cambiarlo a:

./configure --cross-prefix=arm-cortexa9-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm
cortexa9-linux-gnueabihf-gcc --arch=arm --prefix=host --enable-shared --disable-static --disable-doc --disable
x86asm --enable-ffplay

Si está utilizando un sistema de 64 bits, utilice un compilador de 64 bits: la siguiente es la configuración de la placa de desarrollo Xinyingda A53 :

./configure --cross-prefix=aarch64-linux- --cpu=cortex-a53 --disable-asm --enable-cross-compile --target
os=linux --cc=aarch64-linux-gcc --arch=arm --prefix=$PWD/ffmpeg-3.4.5 --enable-shared --disable-static --
deshabilitar-doc --disbale-x86asm

1,5 hacer 

1.6 hacer instalación

 despues de terminar:


2.uso de la biblioteca usbcame 

  2.1 Obtenga la biblioteca usbcame y descomprímala

tar -xf cámara usb.tar.gz 

 2.2 Una vez completada la descompresión, ingresamos a la carpeta ussbcamer y veremos que hay dos carpetas que incluyen include y lib.

,como sigue:

 2.3  Copie la inclusión en ffmpeg compilada en el capítulo anterior a la inclusión en usbcamera

En este momento, no hay nada incluido, podemos entrar y echar un vistazo.

Incluir se usa para colocar archivos de encabezado, por lo que necesitamos copiar los archivos de inclusión de ffmpeg ( tenga en cuenta la ruta de instalación de ffmpeg
diámetro );
cp incluir/lib* /home/xing/work/usbCamera/usbCamera/usbcamera/include/ -rf

2.4   Copie la biblioteca en ffmpeg a la biblioteca en usbcamera

La operación es casi la misma que copiar el archivo de encabezado de inclusión.

2.5 Agregar la biblioteca usbcamera a nuestro proyecto 

Simplemente agregue ffmpeg.pri a nuestro proyecto. Tenga en cuenta que no agregue archivos haciendo clic derecho. Simplemente agréguelo en el archivo xxx.pro

 

include($$PWD/usbcamera/ffmpeg.pri)
INCLUDEPATH += $$PWD/usbcamera/

3. La clase Qwidget mejora USBCameraWidget

 3.1 Haga clic derecho en el Qwidget que desea actualizar y haga clic en Actualizar a:

3.2  Luego necesitamos encontrar el nombre de la clase que queremos mejorar y copiarlo. USBCameraWidget también hereda la clase principal de Qwidget: 


4. compilar 

4.1 Compilación

Solución: agregue el módulo de red al archivo profesional

 

 4.2 Ocurren los siguientes problemas 

La razón es que la versión qt utilizada actualmente es mayor a 5.5 , usando QtMultimedia y QtMultimediaWidgets , que solo están disponibles en Qt5 y no en QT4. Aquí usamos el método QT4 para usar usbcame , y la interfaz cambia 5.5.0 a una versión. mayor que el que usamos (5.8 o 5.9 ), tenga en cuenta que es necesario cambiar todo el 5.5.0 . En los archivos usbcame.cpp y usbcame.h .

Lo cambiamos a:

 

4.3 Errores de salida de la aplicación 

Este error ocurre porque no hay biblioteca. Copie la biblioteca a la placa de desarrollo. Tenga cuidado de comprimir primero y luego copiar.

 Después de la modificación:

 

¡No más errores!


5. Uso de la cámara 

  5.1 Inicialización de la cámara

void Widget::cameraInit()
{
 ui->widget->setCameraName("/dev/video0"); //设置摄像头设备的驱动节点
 ui->widget->setInterval(120); //设置获取摄像头图像周期(ms),就是每隔多少 ms 获取一帧图像
 ui->widget->open();//打开摄像头
}
El siguiente error se produce porque se utiliza un compilador de 64 bits y es necesario definir macros.

 Simplemente ejecútelo nuevamente después de la modificación:

 

5.2 Tomar fotografías 

void Widget::on_takePhotoBtn_clicked()
{
 QImage img = ui->camerawidget->getImage(); //获取摄像头的一帧
QPixmap pix = QPixmap::fromImage(img); //转成 qpixmap
// ui->labVisiterHeader->setPixmap(pix.scaled(ui->labVisiterHeader->size()));//lable 显示
 QString fileName = QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss");
fileName += ".jpg";
#if 1
 QString path = QFileDialog::getExistingDirectory(this,tr("选择一个文件夹"),
 "/",
 QFileDialog::ShowDirsOnly |
QFileDialog::DontResolveSymlinks) ;

//qDebug() << "path=" <<path +"/" + fileName;
 /*保存图片*/
 if(pix.save(path + "/" + fileName) == false){
 qDebug( "pic save error" );
 }
#else
 if(pix.save("/root/"+fileName) == false){
 qDebug( "pic save error" );
 }
#endif
}

5.3 Mostrar etiquetas

void Widget::cameraInit()
{
 ui->usbCameraWidget->setOSD1Visible(true);
 ui->usbCameraWidget->setOSD1Format(USBCameraWidget::OSDFormat_Text);
 ui->usbCameraWidget->setOSD1Text("XYD");
 ui->usbCameraWidget->setOSD1Color(QColor(0, 255, 0));
 ui->usbCameraWidget->setOSD1FontSize(40);
 ui->usbCameraWidget->setOSD2Visible(true);
 ui->usbCameraWidget->setOSD2Format(USBCameraWidget::OSDFormat_DateTime);
 
ui->usbCameraWidget->setOSD2Position(USBCameraWidget::OSDPosition_Right_Bottom);
}

¡Finalizar!

Supongo que te gusta

Origin blog.csdn.net/Lushengshi/article/details/131286212
Recomendado
Clasificación