aardio 图像处理

今天终于学会了编程中的 OCR 技术!原来计算机真的能识别图片里的文字,这种让程序 "看懂" 图像的能力太神奇了,赶紧把学习过程记录下来。

一、初识OCR:让程序读懂图片文字

(一)简单识别实验

OCR就像给程序装上"火眼金睛",我先试了试识别本地图片:

arduino 复制代码
import console;
import string.ocrLite
import string.ocrLite.defaultModels;

var imgpath = "图片路径";
var ocr = string.ocrLite ();

var bit = gdip.bitmap(imgpath);
var text = ocr.detectBitmap(bit);

for(i, value in table.eachIndex(text.blocks)){
console.log(value.text)
}
console.pause();

运行时就像看着程序用"放大镜"逐字扫描图片,当控制台输出文字的那一刻,一种满满的自豪感由然而出!

接着试了网络图片识别,原来只要用inet.http()模块获取图片数据,后面的步骤和本地识别差不多:

arduino 复制代码
import inet.http;
import console;
import string.ocrLite
import string.ocrLite.defaultModels;
var http = inet.http(); 
var imgurl = "图片的url"; 
var ingData = http.get(imgurl)
var ocr = string.ocrLite();
var bit = gdip.bitmap(ingData);
var text = ocr.detectBitmap(bit);
for(i, value in table.eachIndex(text.blocks)){
    console.log(value.text)
}
console.pause();

(二)提高识别准确率的秘诀

我发现图片质量不好时,识别会出错。还能用"图片美容术":

  1. 灰度化处理:把彩色图片变成黑白照片,文字会更清晰
arduino 复制代码
import soImage
import console;
import string.ocrLite
import string.ocrLite.defaultModels;

img = soImage()
img.load("需要转换为灰度图的图片路径") 
// 转换图片为灰度图
img.grayScale()
img.save("保存路径") 

imgpath = "保存路径" 
var ocr = string.ocrLite(); 
var bit = gdip.bitmap(imgpath); 
var text = ocr.detectBitmap(bit); 
for(i, value in table.eachIndex(text.blocks)){
    console.log(value.text)
}
console.pause();

试了下,原本有点模糊的图片处理后,文字边缘果然更清楚了!

二、挑战

今天的挑战是处理这张网络图片:aardio.online/upload/file...

我把学到的知识组合起来,写出了完整代码:

arduino 复制代码
import soImage;
import console;
import inet.http;
import string.ocrLite;
import string.ocrLite.defaultModels;

var img = soImage();
var http = inet.http();

var imageUrl = "https://aardio.online/upload/files/20250423/1745395458.png";
string.save("D:/aaaaaaac.jpg", http.get(imageUrl));

img.load("D:/aaaaaaac.jpg");
//图片灰度化处理
img.grayScale();
img.save("D:/aaabbb.jpg");

var ocr = string.ocrLite();
var bit = gdip.bitmap("D:/aaabbb.jpg");
var imgtext = ocr.detectBitmap(bit);

for(i, value in table.eachIndex(imgtext.blocks)) {
    console.log(value.text)
}
console.pause();

运行时看着程序一步步下载、处理、识别,最后正确输出文字时,成就感爆棚!原来复杂任务都是由一个个小步骤组成的。

三、总结

今天最大的收获是明白OCR不是魔法,而是通过"图片预处理+识别算法"实现的。当图片质量差时,预处理就像给眼睛戴上眼镜,让OCR能看得更清楚。

相关推荐
superman超哥7 小时前
Rust 异步时间管理核心:Tokio 定时器实现机制深度剖析
开发语言·rust·编程语言·rust异步时间管理核心·tokio定时器实现机制·tokio定时器
superman超哥8 小时前
Rust 异步递归的解决方案
开发语言·后端·rust·编程语言·rust异步递归
superman超哥14 小时前
Rust 异步并发核心:tokio::spawn 与任务派发机制深度解析
开发语言·rust·编程语言·rust异步并发核心·rust任务派发机制
superman超哥15 小时前
Rust 异步并发基石:异步锁(Mutex、RwLock)的设计与深度实践
开发语言·后端·rust·编程语言·rust异步并发·rust异步锁·rust mutex
superman超哥16 小时前
Rust 异步错误处理最佳实践
开发语言·rust·编程语言·rust异步错误处理·rust最佳实践
冬奇Lab1 天前
【Kotlin系列03】控制流与函数:从if表达式到Lambda的进化之路
android·kotlin·编程语言
冬奇Lab2 天前
【Kotlin系列02】变量与数据类型:从val/var到空安全的第一课
android·kotlin·编程语言
superman超哥2 天前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程
CS创新实验室2 天前
AI 与编程
人工智能·编程·编程语言
superman超哥2 天前
精确大小迭代器(ExactSizeIterator):Rust性能优化的隐藏利器
开发语言·后端·rust·编程语言·rust性能优化·精确大小迭代器