我正在尝试将 Google Visions 扫描仪应用到我正在开发的应用中。默认情况下,它是一个全屏 Activity ,并且在整个屏幕上跟踪条形码。
但是,我需要一个全屏摄像头,但扫描窗口有限。例如,相机的表面 View 需要全屏,它有 2 个透明叠加层设置为屏幕高度顶部和底部的 35%,在中心留下 30% 的视口(viewport)。
我已经更改了图形叠加层,因此它只会显示在中间视口(viewport)中,但无法弄清楚如何将条形码跟踪器限制在同一区域。
有什么想法吗?
最佳答案
当前的 API 不提供限制扫描区域的方法。但是,您可以过滤来自检测器的结果或裁剪传递到检测器的图像。
过滤结果方法
使用这种方法,条形码检测器仍会扫描整个图像区域,但检测到的目标区域之外的条形码将被忽略。这样做的一种方法是实现一个“聚焦处理器”,它从检测器接收结果,并且最多只将一个条形码传递给相关的跟踪器。例如:
public class CentralBarcodeFocusingProcessor extends FocusingProcessor<Barcode> {
public CentralBarcodeFocusingProcessor(Detector<Barcode> detector, Tracker<Barcode> tracker) {
super(detector, tracker);
}
@Override
public int selectFocus(Detections<Barcode> detections) {
SparseArray<Barcode> barcodes = detections.getDetectedItems();
for (int i = 0; i < barcodes.size(); ++i) {
int id = barcodes.keyAt(i);
if (/* barcode in central region */) {
return id;
}
}
return -1;
}
}
然后您可以像这样将此处理器与检测器相关联:
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
barcodeDetector.setProcessor(
new CentralBarcodeFocusingProcessor(myTracker));
裁剪图像的方法
在调用检测器之前,您需要先自己裁剪图像。这可以通过实现一个 Detector 子类来完成,该子类包装条形码检测器,裁剪接收到的图像,并使用裁剪后的图像调用条形码扫描仪。
例如,您可以制作一个检测器来拦截和裁剪图像,如下所示:
class MyDetector extends Detector<Barcode> {
private Detector<Barcode> mDelegate;
MyDetector(Detector<Barcode> delegate) {
mDelegate = delegate;
}
public SparseArray<Barcode> detect(Frame frame) {
// *** crop the frame here
return mDelegate.detect(croppedFrame);
}
public boolean isOperational() {
return mDelegate.isOperational();
}
public boolean setFocus(int id) {
return mDelegate.setFocus(id);
}
}
您可以用这个包裹条码检测器,将其放在相机源和条码检测器之间:
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context)
.build();
MyDetector myDetector = new MyDetector(barcodeDetector);
myDetector.setProcessor(/* include your processor here */);
mCameraSource = new CameraSource.Builder(context, myDetector)
.build();
关于Android Vision - 减少条码跟踪窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36405717/
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
我有一堆要清理的URL。它们都包含UTM参数,在这种情况下不是必需的,或者是有害的。示例:http://houseofbuttons.tumblr.com/post/22326009438?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+HouseOfButtons+%28House+of+Buttons%29所有可能的参数都以utm_开头。如何使用ruby脚本/结构轻松删除它们而不破坏其他潜在的“好”URL参数? 最佳答案 您可以将正则表达式应用于url以清
我有一个这样的数组[1,1,2,3,3,3,4,5,5]我想计算每个数字出现的次数,我正在尝试这样做[1,1,2,3,3,3,4,5,5].reduce(Hash.new(0)){|hash,number|hash[number]+=1}问题是当我尝试运行它时出现以下错误NoMethodError:undefinedmethod`[]='for1:Fixnumfrom(irb):6:in`blockinirb_binding'from(irb):6:in`each'from(irb):6:in`reduce'from(irb):6我能像这样设置初始值吗,还是我弄错了?
刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom
我正在使用gmailgem发送电子邮件,我需要跟踪这些电子邮件。我该怎么做?我正在尝试搜索带有message_id的电子邮件,但它会从我的收件箱中提取所有电子邮件,而我只想要特定电子邮件的回复。这是我的实际代码:*使用message_id保存电子邮件*mail=gmail.deliver(email)Email.create(:message_id=>mail.message_id,:from=>user.email,:to=>annotation.to,:body=>annotation.content,:title=>annotation.title,:annotation=>an
我正在使用paper_trail进行审计跟踪。除了创建、更新和删除事件外,我还想跟踪一些自定义事件,例如查看(记录)、发送(电子邮件)等。我们如何在审核模型时引入此类自定义事件? 最佳答案 我发现了一个调整,可以在paper_trail管理的Version中添加自定义事件:Version.create(item_type:"Campaign",item_id:campaign.id,event:"Sent")也许这不是正确的解决方案,但它帮助我实现了目标。我想更多地探索paper_trail以找到更好的解决方案。
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion有没有一种运行脚本并查看所有步骤的好方法:执行了哪些代码代码在哪个文件中返回什么错误信息这将是了解开源项目如何运作的好方法。Ruby没有这样的解决方案吗?例如。require"httparty"HTTParty.get"http://www.google.se"然后它会运行代码并向我展示它正在执行的所有代码,其中的文件和行、返回的对象、错误消息等。
在我的Rails应用程序中,我有users,它可以有许多invoices,而invoices又可以有许多payments。现在在dashboardView中,我想总结一个user曾经收到的所有payments,按年、季度或月。付款也分割为毛额、Netty和税额。user.rb:classUser:items).allpayments_with_invoice.select{|x|range.cover?x.date}.sum(&:"#{kind}_amount")endend发票.rb:classInvoicepayment.rb:classPaymentdashboards_cont
我在HTML页面上有一个文本字段,用于检查您是否输入了1到365之间的值。如果用户输入了无效值,如非数字字符或不在范围内的值,它显示一个弹出窗口。我在watirwiki上看到有一个select_no_wait方法,用于在您从列表中选择无效值时关闭弹出窗口。处理键盘事件时出现的弹出窗口的好方法是什么?我是否需要按照select_no_wait方法的实现方式进行操作,或者我们是否可以启动一个不同的进程来消除调用set方法时可能出现的弹出窗口。带有Javascript验证函数的HTML文件示例如下:varnum=0functionvalidate(e){varcharPressed=Stri
我正在将一些遗留的Watir脚本迁移到Watir-Webdriver。除了他们如何设计Watir-Webdriver来处理弹出窗口之外,迁移大部分进行得很顺利。他们没有使用久经考验的“附加”方法,而是用简化的“窗口”方法取而代之。语法非常简单,但是我很难理解如何在不关闭父窗口的情况下关闭单独的子窗口。目前我的代码是这样的-b.button(:xpath=>PREVIEWBUTTON).clickb.window(:title,POPUPWINDOW).useDOb.closeend目前正在发生的是b.close方法正在关闭子窗口和父窗口。我不确定为什么会这样,因为b.close方法包含