Numerical image recognition in Android, Kotlin\Java
У меня есть нейронная сеть, которая принимает такие входные данные (Kotlin) -
val inputFeature0 = TensorBuffer.createFixedSize(intArrayOf(1, 28, 28, 1), DataType.FLOAT32)
inputFeature0.loadBuffer(byteBuffer)
Нейронная сеть умеет распознавать множество символов (написанных отдельно) Мне нужно хотя бы приблизительное знание того, как реализовать алгоритм сегментации фото.
И нужно получить что то вроде этого - [
,
,
,
]
Похожий вопрос который не помог - https://stackoverflow.com/questions/31132746/numerical-image-recognition-in-java
Ответы (2 шт):
Уверен, есть множество способов решить эту задачу, в том числе, алгоритмически. Но, раз уж в вашем проекте применены ИНС, то можно использовать их и для этого. RCNN могут находить и обозначать области, в которых виден похожий объект. Так можно подготовить компактную и быструю нейросеть, которая не сможет распознать символы, но найдёт на картинке "объект, похожий на символ" с 99,99%-ной уверенностью. Далее, обозначенный регион можно вырезать и скормить основной ИНС для точной классификации.

Я нашел ответ на свой вопрос, но этот код работает для белых цифр и черного фона(мне так надо было) Код - Kotlin
val bitmapArray = ArrayList<Bitmap>()
//bitmapArray.add(bitmap) добавить битмап в массив
//bitmapArray[0] извлечь
val crop:Button = findViewById(R.id.croping)
// по нажатии на на кнопку картинка разрезается на несколько и добавляется в массив
crop.setOnClickListener{
val width = bitmap.width
val height = bitmap.height
val image: Bitmap = bitmap
var startPos = 0
var lastValue = 0
val colours: MutableSet<Int> = HashSet()
for (x in 0 until image.width) {
var histValue = 0
for (y in 0 until image.height) {
colours.add(image.getPixel(x, y))
if (image.getPixel(x, y) == -0x1) {
histValue++
}
}
if (histValue == 0 && lastValue == 0) {
startPos = x
} else if (histValue == 0 && lastValue != 0) {
val segment: Bitmap = Bitmap.createBitmap(bitmap,startPos, 0, x - startPos, image.height)
bitmapArray.add(segment)
}
lastValue = histValue
}
if (lastValue != 0) {
val segment: Bitmap = Bitmap.createBitmap(bitmap,startPos, 0, image.width - startPos, image.height)
bitmapArray.add(segment)
}
}
