Android-видение OCR; Android-видение
Пролистали пример видения Android OCR по ссылке github https://codelabs.developers.google.com/codelabs/mobile-vision-ocr/index.html?index=..%2F..%2Findex
Как вы можете автоматически идентифицировать и выбирать номера кредитной карты, не пытаясь нажать на нее. Текущий метод receiveDetection
@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
mGraphicOverlay.clear();
SparseArray<TextBlock> items = detections.getDetectedItems();
for (int i = 0; i < items.size(); ++i) {
TextBlock item = items.valueAt(i);
if (item != null && item.getValue() != null) {
Log.d("Processor", "Text detected! " + item.getValue());
}
OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
mGraphicOverlay.add(graphic);
}
}
@Override
public void release() {
mGraphicOverlay.clear();
}
Я хочу, чтобы метод автоматически распознавал действительный номер кредитной карты (это может быть что угодно, например, номер квитанции, номер счета-фактуры) при сканировании и переключении на другое намерение со значением для выполнения других операций с ним.
1 ответ
Вы можете использовать регулярное выражение и использовать его для соответствия каждой текстовой строке, которую он обнаруживает. если совпадение с номером вашей кредитной карты регулярное выражение, делайте все, что вы хотите дальше. Никакого прикосновения не требуется.
Вы можете попробовать это регулярное выражение (взято из этого вопроса)
^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$
в следующем методе
@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
mGraphicOverlay.clear();
SparseArray<TextBlock> items = detections.getDetectedItems();
for (int i = 0; i < items.size(); ++i) {
TextBlock item = items.valueAt(i);
if (item != null && item.getValue() != null) {
List<Line> textComponents = (List<Line>) item.getComponents();
for (Line currentText : textComponents) {
String text = currentText.getValue();
if (word.matches(CREDIT_CARD_PATTERN){
do your stuff here...
}
}
}
}
OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
mGraphicOverlay.add(graphic);
}
}