Tabla de contenido
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
2.uso de la biblioteca usbcame
2.1 Obtenga la biblioteca usbcame y descomprímala
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:
4.2 Ocurren los siguientes problemas
4.3 Errores de salida de la aplicación
5.1 Inicialización de la cámara
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 .
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=armcortexa9-linux-gnueabihf-gcc --arch=arm --prefix=host --enable-shared --disable-static --disable-doc --disablex86asm --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 --targetos=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.
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
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
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();//打开摄像头
}
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!