0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
1

Работа сканера QR-кодов

17.07.2019, 14:44. Показов 2393. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сканер работает с использованием Mobile Vision API. На некоторых телефонах (примерно одном из десяти) не считывает QR-коды. В чем может быть причина?

Код ниже

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.example.user.qrscaner;
 
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.Typeface;
import android.os.Vibrator;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
 
import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;
 
import java.io.IOException;
 
public class barcode extends AppCompatActivity {
 
    SurfaceView cameraPreview;
    TextView txtresult;
    BarcodeDetector barcodeDetector;
    CameraSource cameraSource;
    final int RequestCameraPermissionID = 1001;
 
 
 
    public static String mess=" ";
String[] allcodes = {"12345",
        "54321",
        "25252",
        "35353",
        "45454"};
 
 
    String [] results = {
            "Первый",
            "Второй",
            "Третий",
            "Четвертый",
            "Пятый"};
 
 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case RequestCameraPermissionID: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(barcode.this,
                                new String[]{android.Manifest.permission.CAMERA},RequestCameraPermissionID);
                        return;
                    }
                    try {
                        cameraSource.start(cameraPreview.getHolder());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
 
        }
 
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_barcode);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview);
        txtresult = (TextView) findViewById(R.id.txtResult);
        barcodeDetector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build();
        cameraSource = new CameraSource.Builder(this, barcodeDetector).setRequestedPreviewSize(640, 480).build();
        Typeface face = Typeface.createFromAsset(getAssets(),"fonts/graffiti.ttf");
        txtresult.setTypeface(face);
 
        cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder surfaceHolder) {
                if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(barcode.this,
                            new String[]{android.Manifest.permission.CAMERA},RequestCameraPermissionID);
                    return;
                }
                try {
                    cameraSource.start(cameraPreview.getHolder());
                } catch (IOException e) {
                    e.printStackTrace();
                }
 
            }
 
            @Override
            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
 
            }
 
            @Override
            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
                cameraSource.stop();
 
            }
        });
 
        barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
            @Override
            public void release() {
 
            }
 
            @Override
            public void receiveDetections(Detector.Detections<Barcode> detections) {
                final SparseArray<Barcode> qrcodes=detections.getDetectedItems();
                if (qrcodes.size()!=0)
                {
 
                    txtresult.post(new Runnable() {
                        @Override
                        public void run() {
                          
                            Vibrator vibrator=(Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
                            vibrator.vibrate(100);
                            barcode.mess=qrcodes.valueAt(0).displayValue;
                            txtresult.setText(barcode.mess.toString());
                            for (int i=0;i<allcodes.length;i++)
                            {if (barcode.mess.toString().equals(allcodes[i])) {
                                txtresult.setText("Код: " + "\n" + results[i]);
                            
                            }
                            }
                        }
                    });
                }
            }
        });
 
 
 
        txtresult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               cameraSource.stop();
               finish();
            }
        });
 
    }
 
    public void onBackPressed() {
 
    }
 
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2019, 14:44
Ответы с готовыми решениями:

Библиотека для сканера QR-кодов
Порекомендуйте какую лучше использовать библиотеку для встраивания сканера QR-кодов в свое...

Подключение сканера к 7.7 Медленная работа сканера с Атоловским драйвером
Добрый день уважаемые форумчане !!! Прошу помощи у гуру умудренных опытым в работе с 7ой ... ...

Подключение сканера штрих-кодов
Всем привет. В скором времени понадобится подключать сканер штрих кодов (модель пока не известна,...

Настройка Сканера штрих-кодов
Здравствуйте, следующая ситуация есть терминал на котором стоит электронная...

14
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
17.07.2019, 15:08 2
Цитата Сообщение от allevashov Посмотреть сообщение
В чем может быть причина?
Камера пластырем заклеена.

Ошибки какие?
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
17.07.2019, 15:31  [ТС] 3
ExFau$t, никаких ошибок. Просто при наведении камеры на код ничего не происходит. Сторонний сканер из плэймаркета читает нормально.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.07.2019, 16:01 4
в это сложно поверить, но у меня было такое же
я убил день и кучу нервов, а потом оказалось что на планшете на котором я тестил оно просто не работало
запустил код на другом девайся и о чудо, оказалось что код рабочий

я гуглил, люди жалуются на разные модели, системы я не увидел и забил просто
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.07.2019, 16:09 5
да, вспомнил еще
я когда проверял то выяснилось что на моем планшете сканер распознавал только штрихкоды и только если их показывать камере вертикально
не шучу, а обычные квадратные не распознавал вообще

так что попробуй взять шрихкод, типа такого и показать камере вертикально и горизонтально
Работа сканера QR-кодов

если определит то поздравляю

а такие вообще не определял
Название: c2.png
Просмотров: 45

Размер: 2.2 Кб
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
17.07.2019, 16:12 6
allevashov, попробуй zxing

Не знаю, как работает Vision, но когда я пилил через zxing, там с камеры тупо bitmap захватывается и потом уже каким-то алгоритмом внутри либы распознаёт инфу. Зависимость алгоритма от модели устройства я как-то не заметил. Была ерунда с камерой, автофокус не срабатывал на некоторых девайсах, поэтому распознать код не получалось.

Добавлено через 3 минуты
Цитата Сообщение от Pablito Посмотреть сообщение
олько если их показывать камере вертикально
А да, и настройки камеры я переопределил, чтобы задать ориентацию битмапа 0 градусов для всех типов камер (некоторые фоткают с поворотом, некоторые без поворота, но пишут поворот в exif)
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
17.07.2019, 16:26  [ТС] 7
Штрихкоды на тех кто QR читает - не видны... А насчет ориентации при считывании QR - вот ему как то пофиг, он и вверх ногами умеет

Короче большая печаль. Не хочется zxing почему то.

Если не затруднит - можете скинуть самый простой код активити для zxinga?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.07.2019, 16:31 8
согласен, я неправильно выразился и запутал
я хотел сказать что штрих код распознавался только если держать его перед камерой вертикально
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
17.07.2019, 16:43  [ТС] 9
ExFau$t, можете скинуть самый простой код активити на zxing? Чтобы он просто код сливал в строковую переменную и все
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
17.07.2019, 16:45 10
Лучший ответ Сообщение было отмечено allevashov как решение

Решение

Да примеров полно, вот какой-то.
1
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
18.07.2019, 11:56  [ТС] 11
ExFau$t, Круто, вроде работает. Но не могу понять, как его в портретную ориентацию развернуть. В самой либе ничего похожего нет на orientation
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
18.07.2019, 12:19 12
Там либа обновилась сильно. Я погуглил мельком, вроде можно конфигурацию камеры менять через integrator.setCaptureActivity(SomeCaptureActivity.class), где SomeCaptureActivity extends CaptureActivity.
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
18.07.2019, 12:23  [ТС] 13
ExFau$t, там вроде дело не в камере, текстовое поле с результатом выводится под прямоугольником считывания, так вот судя по этой надписи, там все activity в альбомную ориентацию повернуто
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
18.07.2019, 12:29 14
Камера захватывает изображение с поворотом 90 или 270 (то есть если сделать снимок и посмотреть exif, там будет стоять поворот), соответственно, распознавание кода происходит тоже с поворотом.
1
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 63
18.07.2019, 12:43  [ТС] 15
Впрочем, мне сама эта надпись не нужна, мне только значение кода в переменную, а для QR ориентация некритична
0
18.07.2019, 12:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2019, 12:43
Помогаю со студенческими работами здесь

Подключение сканера штрих-кодов к ноуту
Здравствуйте! Как можно подключить сканер шрих-кодов, который требует порт RS232 к современному...

Передача данных со сканера штрих-кодов
Доброго времени суток! Не могли бы Вы мне подсказать, как можно организовать передачу данных со...

Чтение из HID - клавиатуры (сканера штрих-кодов)
Уважаемые форумчане, требуется ваша помощь. Есть сканер штрих - кодов, который подключается к...

Как считать данные со сканера штрих кодов
Народ подскажите надо как то считать код со сканера штрих кодов, который как бы программно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru