ocr (optical character recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是ocr最重要的课题,icr(intelligent character recognition)的名词也因此而产生。衡量一个ocr系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。
一、vitis ai library vitis ai library是一组高层次库和 api,专为利用 dpu 高效执行 ai 推断而构建。它是基于 vitis ai运行时利用 vitis运行时统一 api 来构建的,能够为 xrt 提供完整支持。
vitis ai library 通过封装诸多高效且高质量的神经网络,提供易用且统一的接口。由此可简化深度学习神经网络的使用,对于不具备深度学习或 fpga 知识的用户也是如此。vitis ai library 使开发者能够专注于开发自己的应用,而不是底层硬件。
二、实现 相较于vitis ai runtime,vitis ai library 有很多已经封装好的神经网络接口,直接拿来用即可。
ocr识别基于vitis ai library 的ocr_pt模型,ocr识别的代码如下:
#include #include #include #include #include #include #include #include #include ./process_result.hppint main(int argc, char* argv[]) { std::string model = argv[1]; return vitis::ai::main_for_jpeg_demo( argc, argv, [model] { return vitis::ai::ocr::create(model); }, process_result, 2);} 主要使用vitis ai library 的ocr功能(lvitis_ai_library-ocr),具体文字实现的代码:
#include #include #include #include #include #include #include vitis/ai/ocr.hppusing namespace cv;using namespace std;scalar colors[] = { scalar(255, 0, 0), scalar(0, 255, 0), scalar(255, 255, 0), scalar(0, 0, 255) };static cv::mat process_result( cv::mat &img, const vitis::ai::ocrresult &result, bool is_jpeg) { for(unsigned int i=0; i< result.words.size(); i++) { std::string str; for(auto& it: result.box[i]) { str+= std::to_string(it.x)+,+std::to_string(it.y)+,; } str+=result.words[i]; std::cout < < str < <\n; cv::polylines(img, result.box[i], true, cv::scalar(0, 0, 255), 2 ); cv::puttext(img, result.words[i], cv::point(result.box[i][0].x+1, result.box[i][0].y+1 ), cv::font_hershey_simplex, 0.5, cv::scalar(0,0,0), 1); cv::puttext(img, result.words[i], cv::point(result.box[i][0].x, result.box[i][0].y), cv::font_hershey_simplex, 0.5, cv::scalar(0,255,255), 1); } return img;} 代码中可以看出,直接使用了opencv的功能。
三、编译&运行 build.sh文件内容如下:
result=0 && pkg-config --list-all | grep opencv4 && result=1if [ $result -eq 1 ]; then opencv_flags=$(pkg-config --cflags --libs-only-l opencv4)else opencv_flags=$(pkg-config --cflags --libs-only-l opencv)ficxx=${cxx:-g++}for file in $(ls *.cpp); do filename=${file%.*} $cxx -std=c++17 -o2 -i. -o ${filename} ${file} -lvitis_ai_library-ocr -lvitis_ai_library-dpu_task -lvitis_ai_library-xnnpp -lvitis_ai_library-model_config -lvitis_ai_library-math -lvart-util -lxir -pthread -ljson-c -lglog ${opencv_flags} -lopencv_core -lopencv_videoio -lopencv_imgproc -lopencv_imgcodecs -lopencv_highguidone 执行sh build.sh生成可执行文件。待测试的图片如下:
执行ocr识别后的结果如下:
总体情况识别速度很快,内容识别无误,不知道啥情况中间的“of”不见了。
可以看出,vitis ai library 使开发者能够专注于开发自己的应用,而不是底层硬件,快速部署ai相关应用。
英特尔至强E 2200系列处理器,最高8核性价比更高
这么漂亮逼真的美女机器人,你愿意娶吗
三星Galaxy S20销量不佳,受新冠病毒疫情影响大
芯片设计制造封装测试全流程
怎样将白炽灯变为LED灯
Vitis AI Library体验之OCR识别
南京理工大学光电成像团队:以红外热成像研究为主取得一系列重大成果
荣泽科技基于openEuler打造高性能可信数据要素流通平台
Tractica:2025年商用无人机市场将达到137亿美元
激光焊接薄板时需要注意的一些问题
浪潮分布式存储:助力武汉理工大学迈向智能技术支持的"课堂革命"
微雪电子QFN-24BT-0.5-01 QFN24测试座简介
小米MIX2什么时候上市?最新消息:小米MIX2真机谍照曝光,全面屏怒赞,这样的小米MIX2好看到没朋友!
利用PICOZED SDR软件无线电进行概念验证和部署
光存储技术的发展方向
揭秘华为P10超级省电模式——居然还能看股票、聊微信?
富士伺服电机使用中的这些问题不容忽视
美国新蛋公司宣布允许加拿大居民使用加密货币支付商品的费用
德媒:排除华为影响5G发展,5G网络建设或延缓几年
运算放大器的噪声