嵌入式开发记录-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/”目录下看到编译生成的库文件

    

 

posted @ 2020-11-14 22:19  笑不出花的旦旦  阅读(470)  评论(0)    收藏  举报