嵌入式是以应用为中心,以计算机技术为基础,具备存储、通讯、显示能力,并且软硬件可裁剪、可靠性、成本、体积、功耗有严格要求的专用计算机系统.嵌入式系统是一种软件和硬相结合的专用的计算机系统,作为装置或设备的一部分。
那么嵌入式属不属于人工智能呢?从一定层面讲人工智能已经是嵌入式不可或缺的一部分,嵌入式人工智能(AI)是将人工智能算法运行在嵌入式系统的概念,在融入软硬件结合的同时继续添加自动化、智能化的技术。其实在随着科技的发展我们先后经历了互联网时代、物联网时代,那么现在或者说不久的将来应该是人工智能和物联网的智联网时代,嵌入式人工智在智能家居、智能零售、智能交通、智能医疗、智能教育、智能物流、智能安防、智能机器人等行业已经发挥了它巨大的潜力。
通过人工智能在驱动底层硬件整合软件算法的同时可以对设备的运算能力、使用功耗、本身散热等方面进行优化获得最佳的计算模型。人工智能具备机器机器学习的能力,未来将会提高和用户的交互体验,典型的虚拟现实及自动驾驶技术都是人工智能机器学习的代表。
人工智能已经渗透到生活的各个方面,嵌入式人工智能也在逐步的融入我们的生活,方方面面屡见不鲜,这里以openCV为例可见一斑。那么什么是openCV呢, OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了多语言的接口,实现了图像处理和计算机视觉方面的很多通用算法.在人机互动 、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶等方面应用巨大。OpenCV dnn深度神经网络扩展模块,近几年在工业界和学术界新型的一个机器学习领域的流行话题。dnn算法成功的将以往的识别率提高了一个显著的档次。嵌入式开发过程中传输采用基于linux内核的OpenWrt操作系统可用于WiFi视频传输与控制,图片处理采用OpenCV框架,实现对图像的捕捉以及预处理,人工智能方向采用谷歌的机器学习框架TensorFlow,实现深度学习方面的的实际案例。
嵌入式智能人脸识别是一个很典型的嵌入式人工智能的案例,是通过嵌入式系统及openCV级联分类器完美结合的产物,具体实现如下:
int main(int argc, char** argv) {
//创建openCV级联分类器对象c
CascadeClassifier c;
//加载级联分类器的配置文件haarcascade_frontalface_alt.xml.xml
bool res = true;
res = c.load("haarcascade_frontalface_alt.xml");
//判断配置文件是否存在
if(res == false){
cout << "xml is wrong!" << endl;
return -1;
}else{
cout << "xml is ok!" << endl;
}
//获得Mat对象
Mat src = imread("test.jpg");
//创建Mat图片
Mat dst = Mat::zeros(src.size(), src.type());
if(src.data == 0){
cout << "src is wrong!"<< endl;
return -1;
}else{
cout << "src is ok" << endl;
}
namedWindow("src", CV_WINDOW_AUTOSIZE);
imshow("src", src);
//更改dst图片的色彩空间
cvtColor(src, dst, CV_BGR2GRAY);
//dst:通道1,深度是8位
imshow("dst", dst);
Mat dst1 = Mat::zeros(src.size(), src.type());
//直方图均衡化
equalizeHist(dst, dst1);
imshow("dst1", dst1);
//定义存储人脸区域的Rect集合
vector<Rect> faces;//元素是Rect类型,访问元素faces[i]
//识别图像里面的人脸
c.detectMultiScale(dst1, faces, 1.1, 3, 0, Size(24, 24));
//输出人脸的个数
cout << "face num : " << faces.size() << endl;
//输出人脸的矩形位置
int i = 0;
for(i = 0; i < faces.size(); i++){
//绘制人脸的矩形区域
rectangle(src, faces[i], Scalar(0, 0, 255), 2, LINE_8, 0);
}
namedWindow("dst2", CV_WINDOW_AUTOSIZE);
imshow("dst2", src);
waitKey(0);
return 0;
}
人脸识别效果如图所示: