嵌入式开发记录-day59 车牌识别qt程序设计
1、接上一节,创建完成工程后。因为我们有用到OpenCV接口来识别车牌,因此需要添加一些头文件和一些库文件
我们把我们编译的libv4l-0.6.4库拷贝到/usr/local/opencv-2.4.9/lib/下面,并添加到工程的环境边境变量中;
将百度AI的SDK拷贝到Ubuntu的qt工程下并解压,添加base、ocr,h到工程下

2、借助百度例子完善车牌识别
1、完善id、key、秘钥(对应前面创建的接口)
// 设置APPID/AK/SK
std::string app_id = "你的 App ID";
std::string api_key = "你的 Api key";
std::string secret_key = "你的 Secret Key";
aip::Ocr client(app_id, api_key, secret_key);

2、找到百度车牌识别例子

//我们只要把我们用摄像头拍的照片传到下面的这个函数就可以了
//aip::get_file_content("/assets/sample.jpg", &image)
Json::Value result;
std::string image;
aip::get_file_content("/assets/sample.jpg", &image);
// 调用车牌识别
result = client.license_plate(image, aip::null);
// 如果有可选参数
std::map<std::string, std::string> options;
options["multi_detect"] = "true";
// 带参数调用车牌识别
result = client.license_plate(image, options);

3、完善之后的例子如下

3、摄像头初始化
这里通过摄像头获取车牌照片,显示在屏幕上并传给百度AI接口;
cvCreateCameraCapture,初始化从摄像头中获取视频
CvCapture* cvCreateCameraCapture( int index );index:要使用的摄像头索引
#include <highgui.h>
#include <cv.h>
void Widget::InitCamara() //这个函数属于Widget
{
//打开摄像头
//这句代码的意思是打开video4,括号中的參数仅仅要有:
// 0 , -1, 202 但要依据你自己的情况改,实測204可以成功打开
camera = cvCreateCameraCapture(204);
}
// 添加头文件
#include <highgui.h>
#include <cv.h>
CvCapture *camera;//视频获取结构, 用来作为视频获取函数的一个参数
void InitCamara();
4、这里使用定时器在屏幕上显示照片,因此需要添加QTimer定时器类
//首先,我们在widget.h里面声明一个定时器,和一个槽函数,代码如下:
#include <QTimer> //包含QTimer头文件
QTimer timer; //声明QTimer对象
private slots:
void ReadFarme(); //声明槽函数
timer.start(50); //启动定时器,1000为1S ,50为50ms,超时则发出timeoout信号
IplImage *frame; //申请IplImage类型指针,就是申请内存空间来存放每一帧图像
QImage imag; //声明QImage对象
void Widget::ReadFarme()
{
//从摄像头读取一张图片
//这个函数cvQueryFrame作用是从摄像头或者文件中抓取一帧
//参数为视频获取结构也就是我在初始化摄像头声明的CvCapture *camera;
frame = cvQueryFrame(camera);
//将图片格式转换成QImage格式,否则不能再lable上显示
imag = QImage((const uchar*)frame->imageData,
frame->width,
frame->height,
QImage::Format_RGB888).rgbSwapped();
//用label显示一张图片
ui->frame->setPixmap(QPixmap::fromImage(imag));
}
// 定时器 超时
connect(&timer,SIGNAL(timeout()),this,SLOT(ReadFarme()));
5、将获取到的照片传给百度AI接口
std::string PlateNumber ;
int Ret;
frame = cvQueryFrame(camera);
//将图片格式转换成QImage格式,否则不能再lable上显示
imag = QImage((const uchar*)frame->imageData,
frame->width,
frame->height,
QImage::Format_RGB888).rgbSwapped();
//用label显示一张图片
ui->picture->setPixmap(QPixmap::fromImage(imag));
//保存图片到本地
imag.save("./PlateNumber.jpg", "JPG", 100);
//把拍下来的照片传递给百度AI接口获取车牌号
PlateNumber = GetPlateNumber("./PlateNumber.jpg");
//把接口返回来的数据显示到屏幕上
ui->plateNumber->setText(QString::fromStdString(PlateNumber));
// 将照片传给百度AI接口GetPlateNumber()

6、程序完成后,切换到工程目录下,执行qmake,生成Makefile,执行make生成二进制文件,将该文件烧写到开发板中
运行二进制文件
./identify -qws
关于参数 -qws
View Code

浙公网安备 33010602011771号