#android #kotlin #android-room #detection #typeconverter
#Android #kotlin #android-комната #обнаружение #typeconverter
Вопрос:
Класс сущности. Я хочу извлекать элементы, поскольку детектор камеры обнаруживает объекты. Какой тип typeconverter будет принимать список элементов class, confidence и т. Д.?
@Entity(tableName = "Objects_table")
data class Objects(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "object_id")
var id: Int,
@ColumnInfo(name = "object_name")
var name: DetectionResult?,
@ColumnInfo(name = "detected_time")
var time: Result?)
Класс результатов, который я хочу получить
data class Result(
val id: Int,
val title: String,
val confidence: Float,
val location: RectF
) {
val text: String by lazy {
"$id:$title[${"%.2f".format(confidence)}]"
}
}
Класс ViewModel:
class ObjectViewModel(private val repository: ObjectRepository) : ViewModel(), Observable {
val objects = repository.objects
private var objectDetected: ObjectDetectorAnalyzer? = null
fun saver(){
val name = objectDetected?.nobjects?.get(0)
val conf = objectDetected?.nobjects?.get(1)
}
Класс, из которого я ссылаюсь на список объектов, которые постоянно меняются:
class ObjectDetectorAnalyzer(
private val context: Context,
private val config: Config,
private val onDetectionResult: (Result) -> Unit
): ImageAnalysis.Analyzer {
private var inputArray = IntArray(config.inputSize * config.inputSize)
val nobjects = detect(inputArray)
private fun detect(inputArray: IntArray): List<DetectionResult> {
var detector = objectDetector
if (detector == null) {
detector = ObjectDetector(
assetManager = context.assets,
isModelQuantized = config.isQuantized,
inputSize = config.inputSize,
labelFilename = config.labelsFile,
modelFilename = config.modelFile,
numDetections = config.numDetection,
minimumConfidence = config.minimumConfidence,
numThreads = 1,
useNnapi = false
)
objectDetector = detector
}
return detector.detect(inputArray)
}
}
Заранее спасибо!!
Ответ №1:
Этот пример может вам помочь. У меня есть один объект Animal и его список пород
@Entity(tableName = "Animal")
public class Animal {
@PrimaryKey(autoGenerate = true)
private long pid;
@TypeConverters(BreedConverter.class)
@ColumnInfo(name = "breed")
private ArrayList<Breed> breedArrayList;
}
У меня есть аннотация с @TypeConverters, указывающая на BreedConverter.class
class BreedConverter {
@TypeConverter
fun toBreedList(data: String): ArrayList<Breed> {
val listType = object : TypeToken<ArrayList<Breed>>() {}.type
return GsonBuilder().create().fromJson(data, listType)
}
@TypeConverter
fun toBreedString(breed: ArrayList<Breed>): String {
return GsonBuilder().create().toJson(breed)
}
}
В моем случае он работает нормально. Вы можете попробовать этот способ. TypeConverter преобразует список в строку при сохранении и преобразует обратно в список из строки, когда вы обращаетесь к этому объекту с помощью геттеров.