Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Что делает Device Administration IP https://www.cyberforum.ru/ android-dev/ thread2573099.html
Какая суть для чего нужен, что можно делать при помощи Device Administration IP? Можно жизненные примеры? Он что то блокирует?
Дать рекомендацию для моего говно-кода Программирование Android
Уважаемые разработчики, напишите, пожалуйста, кто сможет посмотреть мой супер-пупер-мега-код, и дать какие либо замечания и рекомендации по архитектуре и самому приложению? Делал его в качестве...
RECEIVE_BOOT_COMPLETED - разное поведения на устройствах Программирование Android
Есть Service, который должен запускаться после ребута телефона. Для этого я сдела ресивер и дал ему в Манифесте необходимые условия (какие нашел). Есть 3 телефона и на всех них АБСОЛЮТНО разное...
Программирование Android TextWatcher Как "прочитать" в конструкции afterTextChanged прекращение ввода путем изменения фокуса или как то иначе ? // Обработка событий в EditText // Обработка поля -1 private class... https://www.cyberforum.ru/ android-dev/ thread2572849.html
Программирование Android Reactivex, как вернуть значение об успешности записи из Completable? https://www.cyberforum.ru/ android-dev/ thread2572429.html
Принимаю данные от FCM и в FirebaseMessagingService записываю в бд с помощью Room и Reactivex @Insert(onConflict = REPLACE) Completable insert(PushData data); private String...
Программирование Android Рисование пальцем на экране. Android studio
Вообщем мне надо рисовать пальцем на екране. Реализовать надо через массив точек. Перерыл весь гугл, не нашел.
Программирование Android При запуске Android Studio и эмулятора на диске с каждым днём становится меньше памяти
Добрый день! Недавно начал изучать андроид программирование. Занимаюсь каждый день. И замечаю, что с каждым днём на диске после запуска Android Studio и соответственно эмулятора (чтобы протестить...
Программирование Android После нажатия на кнопку она исчезает Здравствуйте! Я никак не могу сделать так, чтобы при нажатии на кнопку она уменьшалась в размере, а при отпускании становилась прежних размеров. Я пытался по разному, но то у меня кнопка после... https://www.cyberforum.ru/ android-dev/ thread2572088.html
Программирование Android Проблема в переносе кода на 5 версию андройда https://www.cyberforum.ru/ android-dev/ thread2572017.html
Доброго времени суток. Пишу webview приложение, взял за основу код: https://github.com/slymax/webview При сборке под версию андройда выше пятого, сталкиваюсь с ошибкой при компиляции: error:...
Программирование Android облегчить код Как мне облегчить циклы if в данном коде... Есть ли смысл писать внутренний класс ? mport android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import... https://www.cyberforum.ru/ android-dev/ thread2571818.html
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 83
0

Сканер QR - как из превью отправить картинку на анализ

22.01.2020, 18:22. Просмотров 681. Ответов 12
Метки (Все метки)


Всем привет. Пытаюсь следуя руководству https://firebase.google.com/do... d-barcodes написать сканер 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
package com.barcodescaner
 
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.Manifest
import android.content.pm.PackageManager
import android.util.Size
import android.graphics.Matrix
import android.view.*
import android.widget.Toast
import androidx.camera.core.*
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions
 
import java.util.concurrent.Executors
 
 
private const val REQUEST_CODE_PERMISSIONS = 10
 
const val FLAGS_FULLSCREEN =
    View.SYSTEM_UI_FLAG_LOW_PROFILE or
            View.SYSTEM_UI_FLAG_FULLSCREEN or
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
 
// This is an array of all the permission specified in the manifest.
private val REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.CAMERA)
 
val optionsBundle =  FirebaseVisionBarcodeDetectorOptions.Builder().setBarcodeFormats(
    FirebaseVisionBarcode.FORMAT_ALL_FORMATS
)
 
 
val analyser:ImageAnalyser= ImageAnalyser()
 
class LiveScan : AppCompatActivity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
                setContentView(R.layout.activity_live_scan)
        viewFinder= findViewById(R.id.view_finder)
        viewFinder.systemUiVisibility= FLAGS_FULLSCREEN
 
 
 
        if (allPermissionsGranted()){
            viewFinder.post(){startCamera()
 
            }
 
            }
        else{ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS,
            REQUEST_CODE_PERMISSIONS)}
        viewFinder.addOnLayoutChangeListener{ _, _, _, _, _, _, _, _, _ ->
        updateTransform()}
 
 
 
    }
 
    private val executor = Executors.newSingleThreadExecutor()
    private lateinit var viewFinder: TextureView
 
    private fun startCamera() {
        val previewConfig = PreviewConfig.Builder().apply {
            setTargetResolution(Size(viewFinder.width, viewFinder.height))
        }.build()
 
 
        // Build the viewfinder use case
        val preview = Preview(previewConfig)
 
 
 
        // Every time the viewfinder is updated, recompute layout
        preview.setOnPreviewOutputUpdateListener {
 
            // To update the SurfaceTexture, we have to remove it and re-add it
            val parent = viewFinder.parent as ViewGroup
            parent.removeView(viewFinder)
            parent.addView(viewFinder, 0)
 
            viewFinder.surfaceTexture = it.surfaceTexture
            updateTransform()
        }
        val imageCaptureConfig= ImageCaptureConfig.Builder()
            .apply { setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY) }.build()
        // Bind use cases to lifecycle
        // If Android Studio complains about "this" being not a LifecycleOwner
        // try rebuilding the project or updating the appcompat dependency to
        // version 1.1.0 or higher.
        CameraX.bindToLifecycle(this, preview)
 
 
 
    }
 
 
 
 
 
    private fun updateTransform() {
        // TODO: Implement camera viewfinder transformations
        val matrix = Matrix()
 
        // Compute the center of the view finder
        val centerX = viewFinder.width / 2f
        val centerY = viewFinder.height / 2f
 
        // Correct preview output to account for display rotation
        val rotationDegrees = when(viewFinder.display.rotation) {
            Surface.ROTATION_0 -> 0
            Surface.ROTATION_90 -> 90
            Surface.ROTATION_180 -> 180
            Surface.ROTATION_270 -> 270
            else -> return
        }
        matrix.postRotate(-rotationDegrees.toFloat(), centerX, centerY)
 
        // Finally, apply transformations to our TextureView
        viewFinder.setTransform(matrix)
    }
 
    /**
     * Process result from permission request dialog box, has the request
     * been granted? If yes, start Camera. Otherwise display a toast
     */
    override fun onRequestPermissionsResult(
        requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
        if (requestCode == REQUEST_CODE_PERMISSIONS) {
            if (allPermissionsGranted()) {
                viewFinder.post { startCamera() }
            } else {
                Toast.makeText(this,
                    "Permissions not granted by the user.",
                    Toast.LENGTH_SHORT).show()
                finish()
            }
        }
    }
 
    /**
     * Check if all permission specified in the manifest have been granted
     */
    private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
        ContextCompat.checkSelfPermission(
            baseContext, it) == PackageManager.PERMISSION_GRANTED
    }
 
 
}
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
package com.barcodescaner
 
import android.widget.Toast
import android.app.Activity
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageProxy
import com.google.firebase.ml.vision.FirebaseVision
import com.google.firebase.ml.vision.common.FirebaseVisionImage
import com.google.firebase.ml.vision.common.FirebaseVisionImageMetadata
 
     class ImageAnalyser: ImageAnalysis.Analyzer {
        private fun degreesToFirebaseRotation(degrees: Int): Int = when (degrees) {
            0 -> FirebaseVisionImageMetadata.ROTATION_0
            90 -> FirebaseVisionImageMetadata.ROTATION_90
            180 -> FirebaseVisionImageMetadata.ROTATION_180
            270 -> FirebaseVisionImageMetadata.ROTATION_270
            else -> throw Exception("Rotation must be 0, 90, 180, or 270.")
        }
 
        override fun analyze(imageProxy: ImageProxy?, degrees: Int) {
            val mediaImage = imageProxy?.image
            val imageRotation = degreesToFirebaseRotation(degrees)
 
            if (mediaImage != null) {
 
                val image = FirebaseVisionImage.fromMediaImage(mediaImage, imageRotation)
                val metadata= FirebaseVisionImageMetadata.Builder().setWidth(480)
                    .setHeight(360)
                    .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
                    .setRotation(imageRotation).build()
                val detector = FirebaseVision.getInstance().visionBarcodeDetector
 
                val result = detector.detectInImage(image).addOnSuccessListener {barcodes->
                    for (barcode in barcodes){
                        val rawValue = barcode.rawValue
                        Toast.makeText(Activity(),rawValue.toString(),Toast.LENGTH_LONG).show()
                    }
 
                }.addOnFailureListener{
 
                }
 
            }
 
 
        }
    }

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".LiveScan"
    android:orientation="vertical">
    <TextureView
        android:id="@+id/view_finder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>

Помогите разобраться пожалуйста.

Добавлено через 3 часа 10 минут
Так, я так понимаю настроить camerax под imageanalasys забыл)

Вернуться к обсуждению:
Сканер QR - как из превью отправить картинку на анализ
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2020, 18:22
Готовые ответы и решения:

Как сделать превью товара (картинку) ссылку на товар, а не отображение самой картинки в появляющимся окошке?
Как сделать превью товара (картинку) ссылку на товар, а не отображение самой картинки в...

Как отправить картинку на почту
&lt;?php $title = substr(htmlspecialchars(trim($_POST)), 0, 1000); $mess = ...

Как отправить POST'ом картинку?
понять не могу в каком виде нужно прикреплять картинку к POST запросу. по идее этот пост запрос...

Как отправить на анализ просканированный комп программой AVZ?
Помогите удалить рекламные вирусы, банеры. При открытии какого-нибудь сайта вначале выскакивают...

12
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.