- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在应用程序中使用google vision读取条形码和二维码。这很好用,但是当扫描的表面彼此相邻有2个代码时会崩溃,如下图所示。
即使对代码进行了单独扫描,即使对它们进行了正确扫描,也会发生这种情况。有谁知道如何阻止这种情况的发生?
以下是管理代码扫描 Activity 的代码:
public class ScanningActivity extends AppCompatActivity {
SurfaceView cameraPreview;
BarcodeDetector barcodeDetector;
CameraSource cameraSource;
final Integer requestCameraPermissionID = 1001;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity_add_scanner);
final int height = getSurfaceViewHeight();
final int width = getSurfaceViewWidth();
cameraPreview = findViewById(R.id.surfaceview_scanner);
barcodeDetector = new BarcodeDetector.Builder(AddScanningActivity.this)
.setBarcodeFormats(Barcode.ALL_FORMATS)
.build();
cameraSource = new CameraSource.Builder(AddScanningActivity.this, barcodeDetector)
.setAutoFocusEnabled(true)
.setRequestedPreviewSize(width, height)
.build();
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0) {
Vibrator vibrator = (Vibrator) getApplicationContext().getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(100);
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
cameraSource.release();
}
});
}
}
});
cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(AddScanningActivity.this,
new String[]{Manifest.permission.CAMERA}, requestCameraPermissionID);
return;
}
try {
cameraSource.start(cameraPreview.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
}
}, 100);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
cameraSource.stop();
}
});
}
private Integer getSurfaceViewHeight() {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
Integer screenHeight = size.y;
Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
final int statusBarHeight = rectangle.top;
int[] attrs = new int[]{R.attr.actionBarSize};
TypedArray ta = this.obtainStyledAttributes(attrs);
final int actionBarHeight = ta.getDimensionPixelSize(0, -1);
ta.recycle();
return screenHeight - statusBarHeight - actionBarHeight;
}
private Integer getSurfaceViewWidth() {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size.x;
}
}
最佳答案
问题是在释放cameraSource之前,第二次调用了receiveDetections方法。然后第二次调用它,该方法尝试再次释放cameraSource,但是它不再可用,从而导致错误。下面是工作代码,只有一个小的简单更改,即使用 bool(boolean) 值“codeDetected”:
public class AddScanningActivity extends AppCompatActivity {
SurfaceView cameraPreview;
BarcodeDetector barcodeDetector;
CameraSource cameraSource;
final Integer requestCameraPermissionID = 1001;
Boolean codeDetected = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity_add_scanner);
final int height = getSurfaceViewHeight();
final int width = getSurfaceViewWidth();
cameraPreview = findViewById(R.id.surfaceview_scanner);
barcodeDetector = new BarcodeDetector.Builder(AddScanningActivity.this)
.setBarcodeFormats(Barcode.ALL_FORMATS)
.build();
cameraSource = new CameraSource.Builder(AddScanningActivity.this, barcodeDetector)
.setAutoFocusEnabled(true)
.setRequestedPreviewSize(width, height)
.build();
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0 && !codeDetected) {
codeDetected = true;
Vibrator vibrator = (Vibrator) getApplicationContext().getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(100);
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
cameraSource.release();
}
});
}
}
});
cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(AddScanningActivity.this,
new String[]{Manifest.permission.CAMERA}, requestCameraPermissionID);
return;
}
try {
cameraSource.start(cameraPreview.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
}
}, 100);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
cameraSource.stop();
}
});
}
private Integer getSurfaceViewHeight() {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
Integer screenHeight = size.y;
Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
final int statusBarHeight = rectangle.top;
int[] attrs = new int[] {R.attr.actionBarSize};
TypedArray ta = this.obtainStyledAttributes(attrs);
final int actionBarHeight = ta.getDimensionPixelSize(0, -1);
ta.recycle();
return screenHeight - statusBarHeight - actionBarHeight;
}
private Integer getSurfaceViewWidth() {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size.x;
}
}
关于android - 出现2个代码时,Google Vision崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400312/
我正在从 spring boot maven 项目调用 google vision OCR api 以从图像中提取文本。 public class TestGoogleVision { Buffere
是否可以使用 Google Vision API 读取姓名、地址、出生日期等身份证信息?在文档中,我找到了一些东西,但我不知道如何使用它。 https://developers.google.com/
请看两个测试结果。 有两种语言,但 Cloud vision api 总是以一种语言返回结果。 我们能否告诉图像中需要哪种语言,以便引擎可以尝试识别所有字符,即使它们是不同的语言? 1. 原图有3个汉
如何调用 Vision API 并在图像上应用多个功能。 我想在图像上同时应用标签检测和地标检测 最佳答案 您可以如下定义您的请求,以在每个图像中包含多个功能请求 "requests":[
我正在探索 Cloud Vision API 的功能,我想知道是否有任何方法可以检测标签检测下对象的尺寸。例如,如果您在街上拍摄汽车的照片,则 Cloud Vision API 将返回汽车的尺寸(长度
首先,请原谅我的英语不好。我在里面工作。 我正在从事计算机视觉应用方面的工作。我正在使用网络摄像头。主循环是这样的: while true get frame process
我正在尝试训练一个模型来识别图像中的某些标签。我尝试使用 1 小时免费版本,一小时后培训结束。结果并不像我想要的那么准确,所以我冒险选择了没有定义训练模型的具体时间限制的选项。 此时,它显示“训练视觉
我试图识别的最简单的例子: 我用 DOCUMENT_TEXT_DETECTION ,但在答案中我得到了象形文字。 如果我使用 Eng在 ImageContext addAllLanguageHints
我将其交叉发布到 Cloud Vision 的谷歌组... 并添加了一些额外的发现。 以下是我认为相关的所有细节: 使用 VB.NET 2010 使用服务帐号认证 仅限于 .NET 4.0 使用这些
我正在尝试使用 Google Vision API。我正在关注 getting started guide : 我已启用 Cloud Vision API 我已启用计费 我已经设置了 API key
我对使用Microsoft的认知服务还很陌生。我想知道MS Computer Vision API和MS Custom Vision API有什么区别? 最佳答案 它们都处理图像上的计算机视觉,但是希
知道如何将规范化顶点转换为顶点吗?归一化顶点给出了图像上的相对位置,而顶点根据图像的比例返回坐标。我有一组标准化顶点,我想将其转换为常规顶点。 https://cloud.google.com/vis
我正在使用 google cloud vision api 来分析图片。是否有 labelAnnotations 方法的所有可能响应的列表? 最佳答案 API reference Vision API
Google Cloud Vision API(测试版)的第 1 版允许通过 TEXT_DETECTION 请求进行光学字符识别。虽然识别质量很好,但返回的字符没有任何原始布局的暗示。因此,结构化文本
假设我有图像并且我想用西类牙语为它们生成标签 - Google Cloud Vision API 是否允许选择以哪种语言返回标签? 最佳答案 标签检测 Google Cloud Vision API
我使用 import torchvision 时遇到的错误这是: 错误信息 "*Traceback (most recent call last): File "/Users/gokulsrin/
我正在为 Google Cloud Vision API 使用 Python 客户端,与文档中的代码基本相同 http://google-cloud-python.readthedocs.io/en/
我正在查看 Google AutoML Vision API 和 Google Vision API。我知道,如果您使用 Google AutoML Vision API,那么它就是一个自定义模型,因
我正在查看 Google AutoML Vision API 和 Google Vision API。我知道,如果您使用 Google AutoML Vision API,那么它就是一个自定义模型,因
由于火线相机由于带宽限制而变得过时,相机制造商似乎正在转向 USB 3.0 或千兆以太网接口(interface)。两者都有许多制造商都遵守的标准 USB3 Vision 和 GigE Vision。
我是一名优秀的程序员,十分优秀!