嵌入式开发记录-day56 图像识别-01移植AI库
1、车牌识别预备思考
1、过程分析:车牌靠近识别区,摄像头聚焦车牌,按下识别按钮,开始识别车牌,喇叭提示音;
2、需要用的知识点:
摄像头驱动:
界面识别车牌按钮:
摄像头识别车牌:
识别文字、图像...
喇叭驱动:
发出提示音(语言库):
3、这些用的东西如何集成在一起:
代买编译的形式引入进来?
编写一个应用程序来引用这些库?
2、人工智能库这里选择百度的AI库:https://ai.baidu.com/
3、下载文字识别的百度AI接口SDK
进入网页https://ai.baidu.com/-->控制台-->产品服务-->文字识别-->创建应用
填写相关信息,完成后记录创建的应用信息
选择左边的技术文章-->SDK文章-->C++语言-->快速入门,可找到下载SDK的入口 https://ai.baidu.com/sdk
4、移植百度AI依赖库

1、openssl库:openssl整个软件包大概可以分成三个主要的功能部分:ssl协议库、应用程序以及密码算法库。采用C语言作为开发语言,这使得openssl有优秀的跨平台性能,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。
由于安装库libcurl需要支持https,因此在安装该库之间需要先安装OpenSSL库;
由于编译需要最低支持C++ 11,因此使用Ubuntu16,编译器使用arm-2014.05;使用讯为提供的环境就可以;
将视频目录下的压缩包openssl-1.0.2s.tar.gz拷贝到Ubuntu上,并解压;
设置编译器,更改环境变量:cd 到根目录;vim .bashrc; 将被注释掉的编译器的两行代码取消注释;更新环境变量source .bashrc
尝试输入arm,按下tab键,查看arm-none-gnueabi-gcc-4.8.3,接下老就可以进行下一步了;
进入到刚才解压的目录下,配置一下文件
setarch i386 ./config no-asm shared --prefix=/usr/local/openssl/ setarch i386:声明生成的是32位CPU,如果是64位CPU则去除该部分 --prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)。 shared :生成动态连接库。 no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的
修改啊Makefile中的参数:
CC= arm-none-linux-gnueabi-gcc AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r RANLIB= arm-none-linux-gnueabi-ranlib NM= arm-none-linux-gnueabi-nm
编译,安装
make
make install
可发现,该文件在 /usr/local/目录下已经安装好了头文件和库文件
2、安装libcurl库
libcurl:
curl主要功能就是用不同的协议连接和沟通不同的服务器,也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。
前面安装完了libcurl依赖库后,就可以安装这个库;在同样的环境下,
将视频目录下的curl-7.65.0.tar.gz,拷贝至Ubuntu下,并解压tar -vxf curl-7.65.0.tar.gz ,并进入目录;
配置编译参数,
./configure --prefix=/usr/local/curl/ --host=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --with-ssl=/usr/local/openssl --prefix=/usr/local/curl/ 指定安装路径为/usr/local/curl/ --host 指定运行平台为arm CC和 CXX 指定交叉编译器 –with-ssl 使用https(在百度AI快速入门里面说明了libcurl需要支持https)
编译,并安装:
make
make install
最后我们可以看到在 /usr/local/目录下已经安装好了头文件和库文件
3、jsoncpp库移植
jsoncpp是c++解析JSON串常用的解析库之一
拷贝视频目录下的jsoncpp-1.6.5.tar.gz到Ubuntu下,解压tar -vxf jsoncpp-1.6.5.tar.gz,进入目录cd jsoncpp-1.6.5/
创建一个文件夹mkdir arm_jsoncpp,复制需要用到的库到该文件夹下cp src/lib_json/* arm_jsoncpp/,
复制编译用的头文件到新建目录下cp -r include/ arm_jsoncpp/,进入文件夹cd arm_jsoncpp下
arm-none-linux-gnueabi-g++ -c *.cpp -I./include -fPIC // 编译成点o文件,不执行连接 - fPIC与位置无关 mkdir lib ar cr ./lib/libjsoncpp.a *.o // 编译静态库 arm-none-linux-gnueabi-g++ -shared -fPIC *.cpp -I./include -o ./lib/libjsoncpp.so // 编译动态库 -share
在 /usr/local/创建json文件夹mkdir json,拷贝上面的lib文件夹、arm_jsoncpp文件夹到该目录下;
4、OpenCV库移植:
由于需要使用摄像头获取图片并拍照,因此有必要移植该库;
基于上面的环境,需要更换编译器为arm-linux-4.4.1.tar.gz,使用OpenCV版本为opencv-2.4.9.zip
1、安装编译器:
拷贝arm-linux-4.4.1.tar.gz到ubuntu的/usr/local/arm下面并解压,打开环境变量vi ~/.bashrc ;
将之前的编译器注释掉,添加新得编译器:

更新环境变量source .bashrc ;输入arm双击Tab键,如果只有一个4.4.1;则正确;否则reboot重启Ubuntu;
2、OpenCV移植:
将OpenCV源码包opencv-2.4.9.zip拷贝至/home/baidu/opencv目录下,并解压unzip opencv-2.4.9.zip;
OpenCV 2.2 以后版本需要使用 Cmake 生成 makefile 文件,因此需要先安装 cmake。安装Cmake,
apt-get install cmake,apt-get install cmake-qt-gui;
安装val/v4l2等必要的依赖库,一定要在编译opencv之前安装,否则在编译opencv的时候不会被编译进去。
apt-get install v4l2ucp v4l-utils libv4l-dev
打开cmake的gui的界面,
where is the source code:OpenCV源码目录地址;
where tobuild the binaries:生成make编译文件的位置;点击config,选择specify options for cross-compiling.点击next;
operating System 选择Linux;Compilers:选择Ubuntu下的arm版本的gcc和g++;
Target Root 选择交叉编译器的路径“/usr/local/arm/4.4.1;
include Mode 选择“search only in target root”。点击 finish。
进入主界面,cmake读取配置信息,CMAKE_INSTALL_PREFIX 改成你想要的路径,作者改成了“/usr/local/opencv-2.4.9
这里去掉 WITH_TIFF,WITH_CUDA 及 WITH_GTK。点击configure和generate并退出;
在编译路径/opt/opencv_arm 下就生成 Makefile。关闭后我们使用“cd /opt/opencv-arm/”命令进入“/opt/opencv_arm”,
在执行 Makefile 之前需要修改 CMakeCache.txt 文件的 194 行。
将“CMAKE_EXE_LINKER_FLAGS:STRING=' '”改为“CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -ldl”
编译 libv4l库,将libv4l-0.6.4.tar.gz压缩包拷贝到ubuntu目录/home/baidu/opencv下面
把视频资料目录下的的videodev.h头文件拷贝到Ubuntu的/usr/include/linux/下面,
进入解压libv4l库生成的目录,打开makefile,在顶层Makefile添加以下命令:CC=arm-none-linux-gnueabi-gcc
进入libv4l1和libv4l2和libv4lconvert文件夹下,同样每个文件夹对应的makefile里面添加CC=arm-none-linux-gnueabi-gcc
返回到libv4l-0.6.4下,输入下面命令:
mkdir tmp
make
make install PREFIX=$PWD/tmp
进入tmp/lib下,输入file *查看生成的是否为arm平台的文件;
输入以下命令把库和头文件复制到交叉编译链里相应的路径中
cp -r include/* /usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/ cp -r lib/* /usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib
把编译生成的lib库复制到opencv的安装路径下:
cp -r lib/* /opt/opencv-arm/lib
编译OpenCV; cd /opt/opencv-arm/“,回到opencv编译目录,输入make
安装:使用指令“make install”
完成后,可以在“/usr/local/opencv-2.4.9/”目录下看到编译生成的库文件


浙公网安备 33010602011771号