我对Mac OS X上的图像扫描框架有哪些选择?我不是在寻找OCR库.只需要进行实际扫描并导入PDF或类似格式的内容.
很长一段时间以来,您需要特殊的软件来从平板扫描仪创建多页 PDF 文档,这让我很恼火。因为“扫描仪”是一个含糊不清的词(这确实使搜索变得困难!)让我澄清一下:我的意思是,例如,HP F4280 打印机/扫描仪设备以光学方式“扫描”纸质文档并创建数字表示的过程它,通常以 .jpg 或 .tif 文件结尾。
问题是我不知道没有跨平台的程序能够从平板扫描仪创建多页扫描。为此,软件必须一次存储每个扫描的页面,并询问用户是否要扫描另一页。您不能依赖驱动程序来处理多页扫描,因为驱动程序只为换页扫描仪执行此操作,这些扫描仪会不间断地“吸入”一叠纸,并在将数据交给驱动程序框架之前组合数据。
因此,我开始着手创建这样一个程序。在底层,我想在 Windows XP 或更高版本、Mac OS X 和流行的 Linux 2.6 发行版上支持 TWAIN 和 SANE 接口。2008 年或以后的年份。
这是我设想的工作方式。首先,我需要一个提供统一 API 的库,无论后端是使用 TWAIN 还是 SANE。API 必须能够提供所扫描数据的位的字节数组,无论是压缩的还是其他的。应该公开 TWAIN 和 SANE 之间共享的一些属性:例如,DPI、纸张尺寸和颜色/灰度/线性。然后应该可以明确指定、提示或查询成功扫描返回的字节数组的结果图像格式。
我不是特别关心编程环境:我熟悉所有流行的命令式/OO 语言。我更喜欢 Java 或 C# 之类的东西,但 C 或 C++ 也可以正常工作。
一旦我手头有了这样的库,我就可以构建一个只根据需要调用例程的 GUI,并使用几个可用的 PDF 渲染库之一来创建输出。我不坚持“编译一次,随处运行”,但我至少坚持“一次编写,随处编译”。当然,因为 TWAIN 和 SANE 是在互斥平台上可用的不同 API,所以在某些时候必须有一些 #ifdefs 或其他方法来区分平台以确定使用哪个 API。
我打算让我的程序和我直接链接的任何库都符合自由软件的资格(根据 FSF),但我对编程环境的唯一要求是它在 Windows XP 或更高版本、Mac OS X 和Linux 2.6。
我一直在谷歌上搜索很多这样的库,但我什至找不到专有的库,更不用说免费软件了。如果有人发现了这样的宝石,请给我一个链接——否则,任何关于开始使用我的应用程序的建议将不胜感激。如果有必要,我会自己做上述库的开发,并在 GNU LGPL 下作为一个单独的项目发布。为了应用程序,我更喜欢用 Qt4/C++、.NET 和 GTK# 或 Java/Swing 编写它,以获得最大的跨平台兼容性。
是否有任何现有的框架或指南可以提供或解释如何让您的应用识别图像.所以基本上假设图像是一个特定的瓶子,是否有框架允许您扫描瓶子,然后识别它是一个瓶子?
我不需要整个图像覆盖的东西或地理位置(所以基本上只有图像识别一半的增强现实).
这是一个普遍的问题,我只是在寻找一个起点,而不是一个完整的解决方案。
我计划进行一些 3D 扫描,这意味着检查表面并从中生成 3D 模型。AFAIK 有两种方法:一种使用激光光栅扫描整个表面,另一种使用相机在表面上投影网格(不确定带有此网格的一张图片是否足够,或者是否需要更多完毕)。
我的问题:OpenCV 是否支持使用相机的第二种方法?如果是:涉及哪些类/函数?
欢迎所有提示:-)
我有一个兄弟mutlifunction网络打印机/扫描仪/传真机(型号MFC-9140CDN).我正在尝试使用以下代码与WIA,检索使用文档进纸器扫描的项目:
const int FEEDER = 1;
var manager=new DeviceManager();
var deviceInfo=manager.DeviceInfos.Cast<DeviceInfo>().First();
var device=deviceInfo.Connect();
device.Properties["Pages"].set_Value(1);
device.Properties["Document Handling Select"].set_Value(1);
var morePages=true;
var counter=0;
while (morePages) {
counter++;
var item=device.Items[1];
item.Properties["Bits Per Pixel"].set_Value(1);
item.Properties["Horizontal Resolution"].set_Value(300);
item.Properties["Vertical Resolution"].set_Value(300);
var img=(WIA.ImageFile)item.Transfer();
var path=String.Format(@"C:\Users\user1\Documents\test_{0}.tiff",counter);
img.SaveFile(path);
var status=(int)device.Properties["Document Handling Status"].get_Value();
morePages = (status & FEEDER) > 0;
}
Run Code Online (Sandbox Code Playgroud)
当Transfer
达到首次方法,所有页面都要经过文档进纸器.第一页保存img.SaveFile
到传入路径,但所有后续页面都不可用 - device.Items.Count
为1,尝试device.Items[2]
引发异常.
在下一次迭代中,调用Transfer
会引发异常 - 可以理解,因为现在没有页面在进纸器中.
如何将已扫描的后续图像输入进纸器?
(NB迭代所有设备属性,还有一个额外的未命名属性,其id为38922.我无法找到对此属性的任何引用.)
更新
我在设备上找不到与WIA_IPS_SCAN_AHEAD或WIA_DPS_SCAN_AHEAD_PAGES对应的属性,但这是有道理的,因为根据文档,此属性是可选的.
我尝试使用TWAIN(通过NTwain库,我强烈推荐)同样的问题.
对不起谷歌翻译......
你好!我想了解Swift RSBarcodes库的使用.
我试着这样做:
var MyVar:String = ""
self.barcodesHandler = { barcodes in
for barcode in barcodes {
MyVar = barcode.stringValue
}
}
Run Code Online (Sandbox Code Playgroud)
但这没有效果:(
我试着这样做:
RSUnifiedCodeGenerator.shared.generateCode("2166529V", machineReadableCodeObjectType: AVMetadataObjectTypeCode39Code)
Run Code Online (Sandbox Code Playgroud)
但这没有效果:(我该怎么做才能看到生成的图像.我不明白.
也许有人对图书馆或工作示例有完整的描述.我会很感激.
对不起谷歌翻译......
我正在使用jfreesane和Apache PDFBox编写一个简单的扫描应用程序.
这是扫描码:
InetAddress address = InetAddress.getByName("192.168.0.17");
SaneSession session = SaneSession.withRemoteSane(address);
List<SaneDevice> devices = session.listDevices();
SaneDevice device = devices.get(0);
device.open();
device.getOption("resolution").setIntegerValue(300);
BufferedImage bimg = device.acquireImage();
File file = new File("test_scan.png");
ImageIO.write(bimg, "png", file);
device.close();
Run Code Online (Sandbox Code Playgroud)
并制作PDF:
PDDocument document = new PDDocument();
float width = bimg.getWidth();
float height = bimg.getHeight();
PDPage page = new PDPage(new PDRectangle(width, height));
document.addPage(page);
PDImageXObject pdimg = LosslessFactory.createFromImage(document, bimg);
PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true);
stream.drawImage(pdimg, 0, 0);
stream.close();
document.save(filename);
document.close();
Run Code Online (Sandbox Code Playgroud)
这是结果: …
我正在尝试从进纸器扫描几页,尽管当我调用 ShowTransfer 函数时扫描仪会自动扫描所有页面(不使用循环),但我只返回第一页。
我究竟做错了什么?
这是我的代码:
WIA.Item item = device.Items[1] as WIA.Item;
if (pages > 1)
{
// Set to feeder
SetWIAProperty(device.Properties, 44, 1);
}
SetWIAProperty(device.Properties, WIA_DEVICE_PROPERTY_PAGES_ID, 1);
AdjustScannerSettings(item, 150, 0, 0, 1250, 1700, 0, 0, 1);
try
{
// scan image
WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
WIA.ImageFile image = (WIA.ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatBMP, false);
// save to temp file
string fileName = Path.GetTempFileName();
File.Delete(fileName);
image.SaveFile(fileName);
image = null;
// add file to output list
images.Add(Image.FromFile(fileName));
}
catch (Exception exc)
{
throw exc; …
Run Code Online (Sandbox Code Playgroud) 我尝试使用各种库(例如react-native-tesseract
react-native-text-detector
Expo 中的库)来集成 OCR,但它们不起作用。这是我的代码,我想知道如何在其中集成 OCR。预先感谢您的解决方案!
takePicture = async () => {
if (this.camera) {
const options = { quality: 0.5, base64: true };
const data = await this.camera.takePictureAsync(options);
this.runOcr(data.uri);
}
};
runOcr = async (imageUri) => {
//code here
};
return (
<>
<Camera
ref={(ref) => {
this.camera = ref;
}}
style={{
flex: 1,
position: "absolute",
width: "100%",
height: "100%",
}}
type={Camera.Constants.Type.back}
autoFocus={Camera.Constants.AutoFocus.on}
flashMode={
!this.state.isFlash
? Camera.Constants.FlashMode.off
: Camera.Constants.FlashMode.on
}
/>
<View
style={{
position: "absolute",
bottom: "5%",
display: …
Run Code Online (Sandbox Code Playgroud) 我经营一家小企业,但我需要在收到的那些信件和发票方面更有条理.这就是我想要完成的事情:
当我在纸上收到发票或其他信息时,我会把它放在我的扫描仪托盘中并留在那里.
每隔15分钟,我的linux盒子会询问我的扫描仪是否有任何要扫描的内容,如果有,则启动扫描过程并将文件放在文件夹中.
任何人都可以指出我正确的方向,我可以从PHP脚本与我的扫描仪交谈,例如"有什么东西要扫描吗?" 并"开始扫描,将文件放在这里"......