В этом SO Thread, pm0733464, говорит следующее:Является ли OpenSource поставщиком API CameraSource класса Out-Dated?
we open sourced the CameraSource class, which has an auto focus method as well. This one allows you to set a specific focus mode as opposed to the "continuous video" mode that the official API defaults to:
Который был велик. Но похоже, что API Google Vision перешел, и в открытой версии Sourced нет. У официального API теперь есть новый тип процессора: FocusingProcessor - который позволяет детектору реагировать только на событие OnFocus.
barcodeDetector = new BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.QR_CODE | Barcode.PDF417)
.build();
barcodeDetector.setProcessor(new BarcodeFocusingProcessor(
barcodeDetector,
new NullTracker()));
CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1600, 1024)
.setAutoFocusEnabled(true)
.setRequestedFps(24.0f);
cameraSource = builder.build();
В моих экспериментах это «находки» штрихкоды намного быстрее, чем при использовании процессора, что примеры показывают в Official Google Vision API Samples
ли я что-то отсутствует где-нибудь? Или это CameraSource в библиотеках Google.Vision не тот, который они показывают в открытом исходном коде?
[EDIT] Sharing код по просьбе pm0733464:
Для записи, я начал с развилки зрения апи Demo, которая позволяет automatically detecting barcode
Мой код делает несколько простых изменений. Во-первых, я добавляю PDF417 на сканируемые штрих-коды. Затем я устанавливаю процессор на автофокус. Я поворачиваю трекер в nullTracker, потому что я не нужен графический показ, и я надеялся, что ускорило бы некоторые вещи
в BarcodeCaptureActivity я изменить createCameraSource где он определен детектор штрих-кода, как это:
BarcodeDetector barcodeDetector =
new BarcodeDetector.Builder(context)
.setBarcodeFormats(Barcode.PDF417)
.build();
barcodeDetector.setProcessor(new MyCameraFocusingProcessor(
barcodeDetector,
new NullTracker()));
// Creates and starts the camera. Note that this uses a higher resolution in comparison
// to other detection examples to enable the barcode detector to detect small barcodes
// at long distances.
CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1600, 1024)
.setRequestedFps(24.0f);
// make sure that auto focus is an available option
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
builder = builder.setFocusMode(
autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null);
}
mCameraSource = builder
.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null)
.build();
}
Мои FocusProcessor (в том же классе) выглядит следующим образом:
private class MyCameraFocusingProcessor implements Detector.Processor<Barcode>
{
public MyCameraFocusingProcessor(BarcodeDetector barcodeDetector, NullTracker emptyTracker)
{
}
@Override
public void release()
{
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections)
{
// boolean chk = detections.detectorIsOperational();
int sizeCheck = detections.getDetectedItems().size();
if (sizeCheck > 0)
{
SparseArray<Barcode> codes = detections.getDetectedItems();
for (int i = 0; i < sizeCheck; i++)
{
Barcode barcode = codes.valueAt(i);
try
{
if (barcode.format == Barcode.PDF417)
{
Intent data = new Intent();
data.putExtra(BarcodeObject, barcode);
setResult(CommonStatusCodes.SUCCESS, data);
finish();
break;
}
}
catch (Exception ex)
{
Log.d("Detect", "Error: " + ex.getMessage());
}
}
}
return;
}
}
private class NullTracker
{
}
Спасибо за ответ. Есть ли план слияния двух версий? Или fork постоянный, и версия с открытым исходным кодом всегда будет немного отключена? Поскольку вы видели и то, и другое, есть ли недостаток в использовании версии OpenSource для профессионального проекта? Я спрашиваю, потому что, похоже, ошибка в официальной версии. Когда я вызываю cameraSource.release(), я получаю сообщение об ошибке: приложение передало NULL-поверхность. Я пробовал несколько решений на SO, но это всегда происходит. Приложение продолжает работать, но я бы хотел более детально контролировать CameraSource, чтобы избежать таких вещей. – MarkJoel60
"официальные версии с открытым исходным кодом CameraSource являются текущими, хотя есть небольшие отличия" @ pm0733464 - я хотел бы понять небольшие отличия.Потому что даже когда я добавляю FocussingProcessor, openSource по-прежнему почти в два раза медленнее, чем «официальная» версия. И оба звонят автофокусом. (И оба выдают ошибку при остановке(), когда вызывается mCamera.setPreviewTexture (null).) – MarkJoel60
Можете ли вы разместить свой код? – pm0733464