Browse Source

mostly working

refactor/mvc-architecture
Quildra 6 months ago
parent
commit
1a6dedc902
  1. 6
      .idea/.gitignore
  2. 10
      .idea/AndroidProjectSystem.xml
  3. 244
      .idea/codeStyles/Project.xml
  4. 8
      .idea/codeStyles/codeStyleConfig.xml
  5. 34
      .idea/deploymentTargetSelector.xml
  6. 24
      .idea/deviceManager.xml
  7. 18
      .idea/migrations.xml
  8. 72
      app/src/main/AndroidManifest.xml
  9. BIN
      app/src/main/assets/best.onnx
  10. 262
      app/src/main/java/com/quillstudios/pokegoalshelper/EnhancedOCR.kt
  11. 8
      app/src/main/java/com/quillstudios/pokegoalshelper/MainActivity.kt
  12. 184
      app/src/main/java/com/quillstudios/pokegoalshelper/ScreenCaptureService.kt
  13. 1061
      app/src/main/java/com/quillstudios/pokegoalshelper/YOLOOnnxDetector.kt
  14. 685
      app/src/main/java/com/quillstudios/pokegoalshelper/output.txt
  15. 12
      gradle/wrapper/gradle-wrapper.properties
  16. 178
      gradlew.bat
  17. 2808
      opencv/etc/haarcascades/haarcascade_license_plate_rus_16stages.xml
  18. 3010
      opencv/etc/lbpcascades/lbpcascade_frontalface.xml
  19. 2938
      opencv/etc/lbpcascades/lbpcascade_frontalface_improved.xml
  20. 2550
      opencv/etc/lbpcascades/lbpcascade_profileface.xml
  21. 2558
      opencv/etc/lbpcascades/lbpcascade_silverware.xml

6
.idea/.gitignore

@ -1,3 +1,3 @@
# Default ignored files # Default ignored files
/shelf/ /shelf/
/workspace.xml /workspace.xml

10
.idea/AndroidProjectSystem.xml

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="AndroidProjectSystem"> <component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" /> <option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component> </component>
</project> </project>

244
.idea/codeStyles/Project.xml

@ -1,123 +1,123 @@
<component name="ProjectCodeStyleConfiguration"> <component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173"> <code_scheme name="Project" version="173">
<JetCodeStyleSettings> <JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings> </JetCodeStyleSettings>
<codeStyleSettings language="XML"> <codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" /> <option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions> <indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions> </indentOptions>
<arrangement> <arrangement>
<rules> <rules>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>xmlns:android</NAME> <NAME>xmlns:android</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE> <XML_NAMESPACE>^$</XML_NAMESPACE>
</AND> </AND>
</match> </match>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>xmlns:.*</NAME> <NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE> <XML_NAMESPACE>^$</XML_NAMESPACE>
</AND> </AND>
</match> </match>
<order>BY_NAME</order> <order>BY_NAME</order>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>.*:id</NAME> <NAME>.*:id</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND> </AND>
</match> </match>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>.*:name</NAME> <NAME>.*:name</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND> </AND>
</match> </match>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>name</NAME> <NAME>name</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE> <XML_NAMESPACE>^$</XML_NAMESPACE>
</AND> </AND>
</match> </match>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>style</NAME> <NAME>style</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE> <XML_NAMESPACE>^$</XML_NAMESPACE>
</AND> </AND>
</match> </match>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>.*</NAME> <NAME>.*</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE> <XML_NAMESPACE>^$</XML_NAMESPACE>
</AND> </AND>
</match> </match>
<order>BY_NAME</order> <order>BY_NAME</order>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>.*</NAME> <NAME>.*</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND> </AND>
</match> </match>
<order>ANDROID_ATTRIBUTE_ORDER</order> <order>ANDROID_ATTRIBUTE_ORDER</order>
</rule> </rule>
</section> </section>
<section> <section>
<rule> <rule>
<match> <match>
<AND> <AND>
<NAME>.*</NAME> <NAME>.*</NAME>
<XML_ATTRIBUTE /> <XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE> <XML_NAMESPACE>.*</XML_NAMESPACE>
</AND> </AND>
</match> </match>
<order>BY_NAME</order> <order>BY_NAME</order>
</rule> </rule>
</section> </section>
</rules> </rules>
</arrangement> </arrangement>
</codeStyleSettings> </codeStyleSettings>
<codeStyleSettings language="kotlin"> <codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings> </codeStyleSettings>
</code_scheme> </code_scheme>
</component> </component>

8
.idea/codeStyles/codeStyleConfig.xml

@ -1,5 +1,5 @@
<component name="ProjectCodeStyleConfiguration"> <component name="ProjectCodeStyleConfiguration">
<state> <state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" /> <option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state> </state>
</component> </component>

34
.idea/deploymentTargetSelector.xml

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="deploymentTargetSelector"> <component name="deploymentTargetSelector">
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-07-24T12:09:09.545863100Z"> <DropdownSelection timestamp="2025-07-24T12:09:09.545863100Z">
<Target type="DEFAULT_BOOT"> <Target type="DEFAULT_BOOT">
<handle> <handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=R5CX221W00A" /> <DeviceId pluginId="PhysicalDevice" identifier="serial=R5CX221W00A" />
</handle> </handle>
</Target> </Target>
</DropdownSelection> </DropdownSelection>
<DialogSelection /> <DialogSelection />
</SelectionState> </SelectionState>
</selectionStates> </selectionStates>
</component> </component>
</project> </project>

24
.idea/deviceManager.xml

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="DeviceTable"> <component name="DeviceTable">
<option name="columnSorters"> <option name="columnSorters">
<list> <list>
<ColumnSorterState> <ColumnSorterState>
<option name="column" value="Name" /> <option name="column" value="Name" />
<option name="order" value="ASCENDING" /> <option name="order" value="ASCENDING" />
</ColumnSorterState> </ColumnSorterState>
</list> </list>
</option> </option>
</component> </component>
</project> </project>

18
.idea/migrations.xml

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectMigrations"> <component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome"> <option name="MigrateToGradleLocalJavaHome">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
</set> </set>
</option> </option>
</component> </component>
</project> </project>

72
app/src/main/AndroidManifest.xml

@ -1,37 +1,37 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules" android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.PokeGoalsHelper"> android:theme="@style/Theme.PokeGoalsHelper">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/Theme.PokeGoalsHelper"> android:theme="@style/Theme.PokeGoalsHelper">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<service <service
android:name=".ScreenCaptureService" android:name=".ScreenCaptureService"
android:foregroundServiceType="mediaProjection" android:foregroundServiceType="mediaProjection"
android:exported="false" /> android:exported="false" />
</application> </application>
</manifest> </manifest>

BIN
app/src/main/assets/best.onnx

Binary file not shown.

262
app/src/main/java/com/quillstudios/pokegoalshelper/EnhancedOCR.kt

@ -0,0 +1,262 @@
package com.quillstudios.pokegoalshelper
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Matrix
import android.util.Log
import org.opencv.android.Utils
import org.opencv.core.*
import org.opencv.imgproc.Imgproc
import kotlin.math.max
class EnhancedOCR(private val context: Context) {
companion object {
private const val TAG = "EnhancedOCR"
// OCR enhancement settings
private const val UPSCALE_FACTOR = 2.0 // Upscale small text regions
private const val MIN_TEXT_HEIGHT = 20 // Minimum height for good OCR
private const val ENABLE_CONSENSUS_OCR = true
private const val CONSENSUS_THRESHOLD = 0.6f
}
data class OCRResult(
val text: String,
val confidence: Float,
val boundingBox: Rect
)
/**
* Enhanced OCR processing on detected regions with multiple techniques for maximum accuracy
*/
fun enhanceTextDetection(imageMat: Mat, detections: List<Detection>): List<OCRResult> {
val ocrResults = mutableListOf<OCRResult>()
Log.d(TAG, "🔤 Processing ${detections.size} detections for enhanced OCR")
for ((index, detection) in detections.withIndex()) {
if (isTextClass(detection.className)) {
Log.d(TAG, "🔤 Processing text detection $index: ${detection.className}")
try {
val croppedRegion = cropDetectionRegion(imageMat, detection.boundingBox)
val enhancedText = extractTextWithMultipleMethods(croppedRegion, detection)
if (enhancedText.isNotEmpty()) {
ocrResults.add(
OCRResult(
text = enhancedText,
confidence = detection.confidence,
boundingBox = detection.boundingBox
)
)
Log.d(TAG, "✅ OCR result: '$enhancedText' (conf: ${String.format("%.3f", detection.confidence)})")
}
croppedRegion.release()
} catch (e: Exception) {
Log.e(TAG, "❌ Error processing OCR for detection $index", e)
}
}
}
Log.i(TAG, "✅ Enhanced OCR complete: ${ocrResults.size} text regions processed")
return ocrResults
}
private fun isTextClass(className: String): Boolean {
// Define which classes contain text that should be processed with OCR
val textClasses = setOf(
"pokemon_nickname", "pokemon_level", "national_dex_number", "pokemon_species",
"hp_value", "attack_value", "defense_value", "sp_atk_value", "sp_def_value", "speed_value",
"ability_name", "nature_name", "move_name", "original_trainer_name", "original_trainder_number"
)
return textClasses.contains(className)
}
private fun cropDetectionRegion(imageMat: Mat, boundingBox: Rect): Mat {
// Add padding around the detection for better OCR
val padding = 5
val x = max(0, boundingBox.x - padding)
val y = max(0, boundingBox.y - padding)
val width = kotlin.math.min(imageMat.cols() - x, boundingBox.width + 2 * padding)
val height = kotlin.math.min(imageMat.rows() - y, boundingBox.height + 2 * padding)
val expandedRect = Rect(x, y, width, height)
return Mat(imageMat, expandedRect)
}
private fun extractTextWithMultipleMethods(croppedMat: Mat, detection: Detection): String {
val candidates = mutableListOf<Pair<String, Float>>()
try {
// Method 1: Direct OCR on original region
val originalText = performBasicOCR(croppedMat)
if (originalText.isNotEmpty()) {
candidates.add(Pair(originalText, 1.0f))
}
// Method 2: Enhanced preprocessing + OCR
val enhancedMat = enhanceImageForOCR(croppedMat)
val enhancedText = performBasicOCR(enhancedMat)
if (enhancedText.isNotEmpty()) {
candidates.add(Pair(enhancedText, 1.2f)) // Higher weight for enhanced
}
enhancedMat.release()
// Method 3: Upscaled OCR for small text
if (croppedMat.rows() < MIN_TEXT_HEIGHT || croppedMat.cols() < MIN_TEXT_HEIGHT * 2) {
val upscaledMat = upscaleImage(croppedMat)
val upscaledText = performBasicOCR(upscaledMat)
if (upscaledText.isNotEmpty()) {
candidates.add(Pair(upscaledText, 1.1f))
}
upscaledMat.release()
}
// Method 4: Class-specific OCR optimization
val classOptimizedText = performClassSpecificOCR(croppedMat, detection.className)
if (classOptimizedText.isNotEmpty()) {
candidates.add(Pair(classOptimizedText, 1.3f)) // Highest weight for class-specific
}
} catch (e: Exception) {
Log.e(TAG, "❌ Error in multi-method OCR", e)
}
// Return best candidate based on consensus and confidence
return selectBestOCRCandidate(candidates)
}
private fun enhanceImageForOCR(mat: Mat): Mat {
val enhanced = Mat()
try {
// Convert to grayscale for better OCR
val gray = Mat()
if (mat.channels() == 3) {
Imgproc.cvtColor(mat, gray, Imgproc.COLOR_BGR2GRAY)
} else if (mat.channels() == 4) {
Imgproc.cvtColor(mat, gray, Imgproc.COLOR_BGRA2GRAY)
} else {
mat.copyTo(gray)
}
// Apply CLAHE for better contrast
val clahe = Imgproc.createCLAHE(2.0, Size(8.0, 8.0))
clahe.apply(gray, enhanced)
// Optional: Apply slight Gaussian blur to reduce noise
val blurred = Mat()
Imgproc.GaussianBlur(enhanced, blurred, Size(1.0, 1.0), 0.0)
gray.release()
enhanced.release()
return blurred
} catch (e: Exception) {
Log.e(TAG, "❌ Error enhancing image for OCR", e)
mat.copyTo(enhanced)
return enhanced
}
}
private fun upscaleImage(mat: Mat): Mat {
val upscaled = Mat()
try {
val newSize = Size(mat.cols() * UPSCALE_FACTOR, mat.rows() * UPSCALE_FACTOR)
Imgproc.resize(mat, upscaled, newSize, 0.0, 0.0, Imgproc.INTER_CUBIC)
} catch (e: Exception) {
Log.e(TAG, "❌ Error upscaling image", e)
mat.copyTo(upscaled)
}
return upscaled
}
private fun performBasicOCR(mat: Mat): String {
// This is a placeholder for actual OCR implementation
// In a real implementation, you would integrate with:
// - Google ML Kit Text Recognition
// - Tesseract OCR
// - Firebase ML Text Recognition
// - Custom OCR model
try {
// Convert Mat to Bitmap for OCR processing
val bitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, bitmap)
// TODO: Integrate with actual OCR library
// For now, return a placeholder based on image properties
val result = simulateOCRResult(bitmap)
bitmap.recycle()
return result
} catch (e: Exception) {
Log.e(TAG, "❌ Error in basic OCR", e)
return ""
}
}
private fun performClassSpecificOCR(mat: Mat, className: String): String {
// Apply class-specific OCR optimizations
return when (className) {
"pokemon_level" -> {
// For level detection, expect format "Lv. XX" or just numbers
val result = performBasicOCR(mat)
// Could add level-specific parsing here
result
}
"hp_value", "attack_value", "defense_value", "sp_atk_value", "sp_def_value", "speed_value" -> {
// For stats, expect only numbers
val result = performBasicOCR(mat)
// Could filter to only numeric characters
result.filter { it.isDigit() || it == '/' }
}
"national_dex_number" -> {
// Dex numbers are typically 3-4 digits with # prefix
val result = performBasicOCR(mat)
// Could add dex number validation
result
}
else -> performBasicOCR(mat)
}
}
private fun selectBestOCRCandidate(candidates: List<Pair<String, Float>>): String {
if (candidates.isEmpty()) return ""
if (!ENABLE_CONSENSUS_OCR || candidates.size == 1) {
// Return highest weighted candidate
return candidates.maxByOrNull { it.second }?.first ?: ""
}
// Consensus-based selection
val candidateGroups = candidates.groupBy { it.first }
val bestGroup = candidateGroups.maxByOrNull { (_, group) ->
group.sumOf { it.second.toDouble() }
}
return bestGroup?.key ?: candidates.first().first
}
private fun simulateOCRResult(bitmap: Bitmap): String {
// This is a placeholder simulation for OCR
// In production, replace with actual OCR library integration
// Simulate different results based on image characteristics
val width = bitmap.width
val height = bitmap.height
val area = width * height
return when {
area < 500 -> "" // Too small for reliable OCR
width > height * 3 -> "Level 50" // Wide regions might be level indicators
height > width * 2 -> "999" // Tall regions might be numbers
else -> "Pikachu" // Default simulation
}
}
}

8
app/src/main/java/com/quillstudios/pokegoalshelper/MainActivity.kt

@ -71,9 +71,9 @@ class MainActivity : ComponentActivity() {
Log.d(TAG, "Mat created: ${testMat.rows()}x${testMat.cols()}") Log.d(TAG, "Mat created: ${testMat.rows()}x${testMat.cols()}")
// Initialize ONNX YOLO detector for testing // Initialize ONNX YOLO detector for testing
//yoloDetector = YOLOOnnxDetector(this) yoloDetector = YOLOOnnxDetector(this)
yoloDetector_tflite = YOLOTFLiteDetector(this) //yoloDetector_tflite = YOLOTFLiteDetector(this)
if (yoloDetector_tflite!!.initialize()) { if (yoloDetector!!.initialize()) {
Log.d(TAG, "✅ ONNX YOLO detector initialized successfully") Log.d(TAG, "✅ ONNX YOLO detector initialized successfully")
} else { } else {
Log.e(TAG, "❌ ONNX YOLO detector initialization failed") Log.e(TAG, "❌ ONNX YOLO detector initialization failed")
@ -85,7 +85,7 @@ class MainActivity : ComponentActivity() {
private fun testYOLODetection() { private fun testYOLODetection() {
Log.i(TAG, "🧪 Starting ONNX YOLO test with static image...") Log.i(TAG, "🧪 Starting ONNX YOLO test with static image...")
yoloDetector_tflite?.testWithStaticImage() yoloDetector?.testWithStaticImage()
} }
private fun requestScreenCapturePermission() { private fun requestScreenCapturePermission() {

184
app/src/main/java/com/quillstudios/pokegoalshelper/ScreenCaptureService.kt

@ -16,6 +16,10 @@ import android.os.*
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.util.Log import android.util.Log
import android.view.WindowManager import android.view.WindowManager
import android.view.View
import android.view.Gravity
import android.widget.Button
import android.widget.LinearLayout
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import org.opencv.android.Utils import org.opencv.android.Utils
import org.opencv.core.* import org.opencv.core.*
@ -94,8 +98,13 @@ class ScreenCaptureService : Service() {
private var screenDensity = 0 private var screenDensity = 0
private var detectionOverlay: DetectionOverlay? = null private var detectionOverlay: DetectionOverlay? = null
// Floating button overlay
private var overlayButton: View? = null
private var windowManager: WindowManager? = null
private val handler = Handler(Looper.getMainLooper()) private val handler = Handler(Looper.getMainLooper())
private var captureInterval = 2000L // Capture every 2 seconds private var captureInterval = 2000L // Capture every 2 seconds
private var autoProcessing = false // Disable automatic processing
// Thread pool for OCR processing (4 threads for parallel text extraction) // Thread pool for OCR processing (4 threads for parallel text extraction)
private val ocrExecutor = Executors.newFixedThreadPool(4) private val ocrExecutor = Executors.newFixedThreadPool(4)
@ -259,9 +268,9 @@ class ScreenCaptureService : Service() {
return return
} }
Log.d(TAG, "Screen capture setup complete, starting periodic capture") Log.d(TAG, "Screen capture setup complete, creating manual trigger button")
// Start periodic capture // Create floating detection button instead of auto-capture
handler.post(captureRunnable) createFloatingButton()
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Error starting screen capture", e) Log.e(TAG, "Error starting screen capture", e)
@ -274,6 +283,9 @@ class ScreenCaptureService : Service() {
handler.removeCallbacks(captureRunnable) handler.removeCallbacks(captureRunnable)
hideDetectionOverlay() hideDetectionOverlay()
removeFloatingButton()
latestImage?.close()
latestImage = null
virtualDisplay?.release() virtualDisplay?.release()
imageReader?.close() imageReader?.close()
mediaProjection?.unregisterCallback(mediaProjectionCallback) mediaProjection?.unregisterCallback(mediaProjectionCallback)
@ -291,13 +303,22 @@ class ScreenCaptureService : Service() {
try { try {
val image = reader.acquireLatestImage() val image = reader.acquireLatestImage()
if (image != null) { if (image != null) {
processImage(image) if (autoProcessing) {
processImage(image)
} else {
// Store the latest image for manual processing
latestImage?.close() // Release previous image
latestImage = image
return@OnImageAvailableListener // Don't close the image yet
}
image.close() image.close()
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Error in onImageAvailableListener", e) Log.e(TAG, "Error in onImageAvailableListener", e)
} }
} }
private var latestImage: Image? = null
private fun captureScreen() { private fun captureScreen() {
// Trigger image capture by reading from the ImageReader // Trigger image capture by reading from the ImageReader
@ -605,8 +626,22 @@ class ScreenCaptureService : Service() {
if (detection == null) return null if (detection == null) return null
try { try {
// Extract region of interest using YOLO bounding box // Validate and clip bounding box to image boundaries
val roi = Mat(mat, detection.boundingBox) val bbox = detection.boundingBox
val clippedX = kotlin.math.max(0, kotlin.math.min(bbox.x, mat.cols() - 1))
val clippedY = kotlin.math.max(0, kotlin.math.min(bbox.y, mat.rows() - 1))
val clippedWidth = kotlin.math.max(1, kotlin.math.min(bbox.width, mat.cols() - clippedX))
val clippedHeight = kotlin.math.max(1, kotlin.math.min(bbox.height, mat.rows() - clippedY))
val safeBbox = Rect(clippedX, clippedY, clippedWidth, clippedHeight)
// Debug logging for problematic bounding boxes
if (safeBbox.x != bbox.x || safeBbox.y != bbox.y || safeBbox.width != bbox.width || safeBbox.height != bbox.height) {
Log.w(TAG, "⚠️ Clipped bbox for ${detection.className}: original=[${bbox.x},${bbox.y},${bbox.width},${bbox.height}] → safe=[${safeBbox.x},${safeBbox.y},${safeBbox.width},${safeBbox.height}] (image: ${mat.cols()}x${mat.rows()})")
}
// Extract region of interest using safe bounding box
val roi = Mat(mat, safeBbox)
// Preprocess image for better OCR // Preprocess image for better OCR
val processedRoi = preprocessImageForOCR(roi) val processedRoi = preprocessImageForOCR(roi)
@ -1017,9 +1052,146 @@ class ScreenCaptureService : Service() {
Log.i(TAG, "====================================") Log.i(TAG, "====================================")
} }
private fun createFloatingButton() {
try {
if (overlayButton != null) return // Already created
windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
// Create a container for multiple buttons
val buttonContainer = LinearLayout(this).apply {
orientation = LinearLayout.VERTICAL
setBackgroundColor(0x80000000.toInt()) // Semi-transparent black background
setPadding(8, 8, 8, 8)
}
// Main detect button
val detectButton = Button(this).apply {
text = "🔍 DETECT"
textSize = 10f
setBackgroundColor(0xFF4CAF50.toInt()) // Green
setTextColor(0xFFFFFFFF.toInt())
layoutParams = LinearLayout.LayoutParams(140, 80)
setOnClickListener { triggerManualDetection() }
}
// Coordinate transform test buttons
val directButton = Button(this).apply {
text = "DIRECT"
textSize = 9f
setBackgroundColor(0xFF2196F3.toInt()) // Blue
setTextColor(0xFFFFFFFF.toInt())
layoutParams = LinearLayout.LayoutParams(140, 60)
setOnClickListener {
YOLOOnnxDetector.setCoordinateMode("DIRECT")
triggerManualDetection()
}
}
val letterboxButton = Button(this).apply {
text = "LETTERBOX"
textSize = 9f
setBackgroundColor(0xFFFF9800.toInt()) // Orange
setTextColor(0xFFFFFFFF.toInt())
layoutParams = LinearLayout.LayoutParams(140, 60)
setOnClickListener {
YOLOOnnxDetector.setCoordinateMode("LETTERBOX")
triggerManualDetection()
}
}
val hybridButton = Button(this).apply {
text = "HYBRID"
textSize = 9f
setBackgroundColor(0xFF9C27B0.toInt()) // Purple
setTextColor(0xFFFFFFFF.toInt())
layoutParams = LinearLayout.LayoutParams(140, 60)
setOnClickListener {
YOLOOnnxDetector.setCoordinateMode("HYBRID")
triggerManualDetection()
}
}
buttonContainer.addView(detectButton)
buttonContainer.addView(directButton)
buttonContainer.addView(letterboxButton)
buttonContainer.addView(hybridButton)
overlayButton = buttonContainer
val params = WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
@Suppress("DEPRECATION")
WindowManager.LayoutParams.TYPE_PHONE
},
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
).apply {
gravity = Gravity.TOP or Gravity.START
x = 100
y = 200
}
windowManager?.addView(overlayButton, params)
Log.d(TAG, "✅ Floating detection button created")
} catch (e: Exception) {
Log.e(TAG, "❌ Error creating floating button", e)
}
}
private fun removeFloatingButton() {
try {
overlayButton?.let { button ->
windowManager?.removeView(button)
overlayButton = null
}
windowManager = null
Log.d(TAG, "🗑️ Floating button removed")
} catch (e: Exception) {
Log.e(TAG, "❌ Error removing floating button", e)
}
}
private fun triggerManualDetection() {
Log.d(TAG, "🔍 Manual detection triggered!")
latestImage?.let { image ->
try {
// Update main button to show processing (find the first button in the LinearLayout)
val mainButton = (overlayButton as? LinearLayout)?.getChildAt(0) as? Button
mainButton?.text = "⏳ PROCESSING..."
mainButton?.isEnabled = false
// Process the image
processImage(image)
// Reset button after processing
handler.postDelayed({
val resetButton = (overlayButton as? LinearLayout)?.getChildAt(0) as? Button
resetButton?.text = "🔍 DETECT"
resetButton?.isEnabled = true
}, 2000)
} catch (e: Exception) {
Log.e(TAG, "❌ Error in manual detection", e)
val errorButton = (overlayButton as? LinearLayout)?.getChildAt(0) as? Button
errorButton?.text = "🔍 DETECT"
errorButton?.isEnabled = true
}
} ?: run {
Log.w(TAG, "⚠️ No image available for detection")
}
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
hideDetectionOverlay() hideDetectionOverlay()
removeFloatingButton()
yoloDetector?.release() yoloDetector?.release()
ocrExecutor.shutdown() ocrExecutor.shutdown()
stopScreenCapture() stopScreenCapture()

1061
app/src/main/java/com/quillstudios/pokegoalshelper/YOLOOnnxDetector.kt

File diff suppressed because it is too large

685
app/src/main/java/com/quillstudios/pokegoalshelper/output.txt

@ -0,0 +1,685 @@
D 🔍 Manual detection triggered!
20:20:55.462 W Failed to load libubwcp.so
20:20:55.494 I 📱 ANALYZING SCREEN: 1080x2340
20:20:55.494 D 🔄 Starting new analysis cycle
20:20:55.494 D 🔍 Running enhanced ONNX YOLO detection on 1080x2340 image
20:20:55.494 D 🔍 Running inference with preprocessing: ultralytics
20:20:55.494 D 🔧 Ultralytics preprocessing: input 1080x2340, type=24
20:20:55.520 D 📐 Letterbox: 1080x2340 → 295x640 → 640x640 (scale: 0.274)
20:20:55.522 D ✅ Ultralytics preprocessing complete with Gaussian smoothing
20:20:55.529 D 🖼️ Preprocessed image: 640x640, channels: 3
20:20:55.657 D 🌐 ONNX input first 10 values: [0.4471, 0.4471, 0.4471, 0.4471, 0.4471, 0.4471, 0.4471, 0.4471, 0.4471, 0.4471]
20:20:56.189 D 🔍 Processing detections from output array of size 1800
20:20:56.189 D 🔍 Original image size: 1080x2340
20:20:56.189 D 🔍 Detected NMS output format: [1, 300, 6] - Post-processed by model
20:20:56.189 D 📐 Coordinate analysis: min=34.4, max=442.1
20:20:56.189 D 📐 Using DIRECT transform: scaleX=1.688, scaleY=3.656
20:20:56.189 D 🔍 Parsing NMS output: 300 post-processed detections
20:20:56.189 D 🔍 NMS Detection 0: raw=[362.6, 36.1, 383.7, 47.9]
20:20:56.189 D 🔍 NMS Detection 0: using DIRECT transform
20:20:56.189 D 🔍 NMS Detection 0: final transformed=[612.0, 131.8, 647.5, 175.3]
20:20:56.189 D 🔍 NMS Detection 0: image bounds=[0, 0, 1080, 2340]
20:20:56.189 D ✅ Valid NMS detection: class=33 (language), conf=0.9624
20:20:56.189 D 🔍 NMS Detection 1: raw=[207.7, 253.1, 232.8, 263.9]
20:20:56.189 D 🔍 NMS Detection 1: using DIRECT transform
20:20:56.189 D 🔍 NMS Detection 1: final transformed=[350.5, 925.5, 392.9, 964.7]
20:20:56.189 D 🔍 NMS Detection 1: image bounds=[0, 0, 1080, 2340]
20:20:56.189 D ✅ Valid NMS detection: class=46 (national_dex_number), conf=0.9634
20:20:56.189 D 🔍 NMS Detection 2: raw=[389.1, 362.7, 442.1, 375.3]
20:20:56.189 D 🔍 NMS Detection 2: using DIRECT transform
20:20:56.189 D 🔍 NMS Detection 2: final transformed=[656.6, 1326.0, 746.1, 1372.1]
20:20:56.189 D 🔍 NMS Detection 2: image bounds=[0, 0, 1080, 2340]
20:20:56.190 D ✅ Valid NMS detection: class=70 (move_name), conf=0.9688
20:20:56.190 D 🎯 NMS parsing complete: 21 valid detections
20:20:56.191 D 🔍 Running inference with preprocessing: enhanced
20:20:56.201 D 🖼️ Preprocessed image: 640x640, channels: 3
20:20:56.308 D 🌐 ONNX input first 10 values: [0.1725, 0.1686, 0.1647, 0.1647, 0.1608, 0.1725, 0.1725, 0.1725, 0.1647, 0.1647]
20:20:56.833 D 🔍 Processing detections from output array of size 1800
20:20:56.833 D 🔍 Original image size: 1080x2340
20:20:56.833 D 🔍 Detected NMS output format: [1, 300, 6] - Post-processed by model
20:20:56.834 D 📐 Coordinate analysis: min=34.0, max=576.9
20:20:56.834 D 📐 Using DIRECT transform: scaleX=1.688, scaleY=3.656
20:20:56.834 D 🔍 Parsing NMS output: 300 post-processed detections
20:20:56.834 D 🔍 NMS Detection 0: raw=[413.8, 35.8, 459.2, 47.6]
20:20:56.834 D 🔍 NMS Detection 0: using DIRECT transform
20:20:56.834 D 🔍 NMS Detection 0: final transformed=[698.3, 131.1, 774.8, 174.1]
20:20:56.834 D 🔍 NMS Detection 0: image bounds=[0, 0, 1080, 2340]
20:20:56.834 D ✅ Valid NMS detection: class=33 (language), conf=0.9582
20:20:56.834 D 🔍 NMS Detection 1: raw=[57.2, 34.0, 133.7, 50.3]
20:20:56.834 D 🔍 NMS Detection 1: using DIRECT transform
20:20:56.834 D 🔍 NMS Detection 1: final transformed=[96.5, 124.2, 225.7, 183.8]
20:20:56.834 D 🔍 NMS Detection 1: image bounds=[0, 0, 1080, 2340]
20:20:56.834 D ✅ Valid NMS detection: class=29 (pokemon_nickname), conf=0.9589
20:20:56.834 D 🔍 NMS Detection 2: raw=[198.1, 252.0, 263.7, 265.2]
20:20:56.834 D 🔍 NMS Detection 2: using DIRECT transform
20:20:56.834 D 🔍 NMS Detection 2: final transformed=[334.2, 921.3, 444.9, 969.6]
20:20:56.834 D 🔍 NMS Detection 2: image bounds=[0, 0, 1080, 2340]
20:20:56.834 D ✅ Valid NMS detection: class=47 (pokemon_species), conf=0.9986
20:20:56.835 D 🎯 NMS parsing complete: 16 valid detections
20:20:56.835 D 🔍 Running inference with preprocessing: sharpened
20:20:56.848 D 🖼️ Preprocessed image: 640x640, channels: 3
20:20:56.955 D 🌐 ONNX input first 10 values: [0.2353, 0.2392, 0.2314, 0.2314, 0.2275, 0.2392, 0.2392, 0.2392, 0.2392, 0.2392]
20:20:57.491 D 🔍 Processing detections from output array of size 1800
20:20:57.491 D 🔍 Original image size: 1080x2340
20:20:57.491 D 🔍 Detected NMS output format: [1, 300, 6] - Post-processed by model
20:20:57.491 D 📐 Coordinate analysis: min=34.0, max=578.5
20:20:57.491 D 📐 Using DIRECT transform: scaleX=1.688, scaleY=3.656
20:20:57.491 D 🔍 Parsing NMS output: 300 post-processed detections
20:20:57.491 D 🔍 NMS Detection 0: raw=[56.9, 34.0, 133.1, 49.9]
20:20:57.492 D 🔍 NMS Detection 0: using DIRECT transform
20:20:57.492 D 🔍 NMS Detection 0: final transformed=[95.9, 124.5, 224.6, 182.4]
20:20:57.492 D 🔍 NMS Detection 0: image bounds=[0, 0, 1080, 2340]
20:20:57.492 D ✅ Valid NMS detection: class=29 (pokemon_nickname), conf=0.9607
20:20:57.492 D 🔍 NMS Detection 1: raw=[413.7, 35.6, 459.6, 48.1]
20:20:57.492 D 🔍 NMS Detection 1: using DIRECT transform
20:20:57.492 D 🔍 NMS Detection 1: final transformed=[698.1, 130.1, 775.6, 175.8]
20:20:57.492 D 🔍 NMS Detection 1: image bounds=[0, 0, 1080, 2340]
20:20:57.492 D ✅ Valid NMS detection: class=33 (language), conf=0.9718
20:20:57.492 D 🔍 NMS Detection 2: raw=[124.5, 480.1, 219.6, 494.5]
20:20:57.492 D 🔍 NMS Detection 2: using DIRECT transform
20:20:57.492 D 🔍 NMS Detection 2: final transformed=[210.1, 1755.3, 370.6, 1808.1]
20:20:57.492 D 🔍 NMS Detection 2: image bounds=[0, 0, 1080, 2340]
20:20:57.492 D ✅ Valid NMS detection: class=68 (ability_name), conf=0.9928
20:20:57.492 D 🎯 NMS parsing complete: 13 valid detections
20:20:57.493 D 🔄 Running test-time augmentation
20:20:57.500 D 🖼️ Preprocessed image: 640x640, channels: 3
20:20:57.611 D 🌐 ONNX input first 10 values: [0.1451, 0.1451, 0.1451, 0.1451, 0.1451, 0.1451, 0.1451, 0.1451, 0.1451, 0.1451]
20:20:58.144 D 🔍 Processing detections from output array of size 1800
20:20:58.144 D 🔍 Original image size: 1080x2340
20:20:58.144 D 🔍 Detected NMS output format: [1, 300, 6] - Post-processed by model
20:20:58.144 D 📐 Coordinate analysis: min=35.1, max=582.5
20:20:58.144 D 📐 Using DIRECT transform: scaleX=1.688, scaleY=3.656
20:20:58.144 D 🔍 Parsing NMS output: 300 post-processed detections
20:20:58.144 D 🔍 NMS Detection 0: raw=[180.3, 36.0, 226.1, 48.2]
20:20:58.144 D 🔍 NMS Detection 0: using DIRECT transform
20:20:58.144 D 🔍 NMS Detection 0: final transformed=[304.2, 131.5, 381.5, 176.2]
20:20:58.144 D 🔍 NMS Detection 0: image bounds=[0, 0, 1080, 2340]
20:20:58.144 D ✅ Valid NMS detection: class=33 (language), conf=0.9630
20:20:58.144 D 🔍 NMS Detection 1: raw=[509.5, 35.1, 582.5, 49.7]
20:20:58.144 D 🔍 NMS Detection 1: using DIRECT transform
20:20:58.144 D 🔍 NMS Detection 1: final transformed=[859.8, 128.2, 982.9, 181.8]
20:20:58.144 D 🔍 NMS Detection 1: image bounds=[0, 0, 1080, 2340]
20:20:58.144 D ✅ Valid NMS detection: class=29 (pokemon_nickname), conf=0.9739
20:20:58.144 D 🔍 NMS Detection 2: raw=[376.3, 252.1, 442.6, 265.5]
20:20:58.144 D 🔍 NMS Detection 2: using DIRECT transform
20:20:58.145 D 🔍 NMS Detection 2: final transformed=[635.1, 921.9, 746.9, 970.9]
20:20:58.145 D 🔍 NMS Detection 2: image bounds=[0, 0, 1080, 2340]
20:20:58.145 D ✅ Valid NMS detection: class=47 (pokemon_species), conf=0.9793
20:20:58.145 D 🎯 NMS parsing complete: 13 valid detections
20:20:58.153 D 🔗 Merged 2 overlapping detections, final conf: 0.772
20:20:58.153 D 🔗 Merged 3 overlapping detections, final conf: 0.844
20:20:58.153 D 🔗 Merged 3 overlapping detections, final conf: 0.827
20:20:58.154 D 🔗 Merged 3 overlapping detections, final conf: 0.900
20:20:58.154 D 🔗 Merged 2 overlapping detections, final conf: 0.925
20:20:58.154 D 🔗 Merged 3 overlapping detections, final conf: 0.846
20:20:58.154 D 🔗 Merged 3 overlapping detections, final conf: 0.912
20:20:58.154 D 🔗 Merged 3 overlapping detections, final conf: 0.961
20:20:58.155 D 🔗 Merged 3 overlapping detections, final conf: 0.964
20:20:58.155 D 🔗 Merged 2 overlapping detections, final conf: 0.732
20:20:58.155 D 🔗 Merged 3 overlapping detections, final conf: 0.932
20:20:58.155 D 🔗 Merged 3 overlapping detections, final conf: 0.958
20:20:58.155 D 🔗 Merged 3 overlapping detections, final conf: 0.932
20:20:58.156 I ✅ Enhanced ONNX detection complete: 40 objects in 2662ms
20:20:58.156 I 🎯 ONNX YOLO detected 40 UI elements
20:20:58.156 I 0: type_1 (0.999) at [601, 925, 51, 41]
20:20:58.156 I 1: speed_value (0.999) at [432, 1575, 24, 32]
20:20:58.156 I 2: nature_name (0.999) at [744, 1758, 85, 49]
20:20:58.156 I 3: move_name (0.998) at [671, 1550, 58, 44]
20:20:58.156 I 4: origin_icon_swsh (0.995) at [388, 1060, 25, 50]
20:20:58.156 I 5: sp_atk_value (0.994) at [364, 1266, 25, 30]
20:20:58.156 I 6: original_trainer_name (0.994) at [440, 1903, 45, 43]
20:20:58.156 I 7: hp_value (0.991) at [431, 1201, 26, 35]
20:20:58.156 I 8: ability_name (0.990) at [383, 1760, 79, 43]
20:20:58.156 I 9: nature_name (0.988) at [631, 1762, 42, 43]
20:20:58.156 I 10: sp_def_value (0.987) at [365, 1512, 24, 30]
20:20:58.156 I 11: original_trainder_number (0.985) at [666, 1904, 56, 41]
20:20:58.156 I 12: defense_value (0.982) at [499, 1511, 24, 32]
20:20:58.156 I 13: pokemon_level (0.980) at [545, 131, 38, 46]
20:20:58.156 I 14: move_name (0.978) at [667, 1437, 69, 44]
20:20:58.156 I 15: pokemon_nickname (0.977) at [333, 125, 60, 52]
20:20:58.156 I 16: move_name (0.977) at [659, 1216, 82, 48]
20:20:58.156 I 17: attack_value (0.973) at [499, 1267, 25, 32]
20:20:58.156 I 18: pokemon_species (0.971) at [437, 922, 61, 46]
20:20:58.156 I 19: move_name (0.969) at [656, 1325, 89, 46]
20:20:58.156 I 20: original_trainder_number (0.964) at [818, 1900, 112, 51]
20:20:58.156 I 21: national_dex_number (0.963) at [350, 925, 42, 39]
20:20:58.156 I 22: language (0.962) at [611, 131, 35, 43]
20:20:58.156 I 23: ability_name (0.961) at [210, 1755, 159, 51]
20:20:58.156 I 24: pokemon_species (0.958) at [333, 920, 110, 48]
20:20:58.156 I 25: language (0.932) at [698, 130, 76, 44]
20:20:58.156 I 26: pokemon_nickname (0.932) at [96, 125, 126, 56]
20:20:58.156 I 27: move_name (0.925) at [832, 1550, 116, 48]
20:20:58.157 I 28: hp_value (0.912) at [308, 1199, 52, 37]
20:20:58.157 I 29: move_name (0.900) at [805, 1214, 169, 51]
20:20:58.157 I 30: original_trainer_name (0.846) at [329, 1899, 95, 50]
20:20:58.157 I 31: speed_value (0.844) at [309, 1576, 49, 30]
20:20:58.157 I 32: move_name (0.827) at [817, 1434, 147, 51]
20:20:58.157 I 33: move_name (0.795) at [786, 1325, 201, 50]
20:20:58.157 I 34: type_1 (0.772) at [683, 922, 102, 44]
20:20:58.157 I 35: defense_value (0.732) at [474, 1510, 33, 33]
20:20:58.157 I 36: pokemon_level (0.708) at [564, 132, 61, 48]
20:20:58.157 I 37: language (0.681) at [828, 122, 55, 61]
20:20:58.157 I 38: pokemon_nickname (0.651) at [826, 121, 57, 65]
20:20:58.157 I 39: national_dex_number (0.609) at [140, 924, 76, 42]
20:20:58.157 I 🔍 Detection counts by type: {type_1=2, speed_value=2, nature_name=2, move_name=8, origin_icon_swsh=1, sp_atk_value=1, original_trainer_name=2, hp_value=2, ability_name=2, sp_def_value=1, original_trainder_number=2, defense_value=2, pokemon_level=2, pokemon_nickname=3, attack_value=1, pokemon_species=2, national_dex_number=2, language=3}
20:20:58.161 W ⚠️ Missing expected elements: [shiny_icon, ball_icon_pokeball, ball_icon_greatball, ball_icon_ultraball, ball_icon_masterball]
20:20:58.161 I 🎨 Creating YOLO detection overlay for 40 detections
20:20:58.161 I 🆕 Creating new DetectionOverlay instance
20:20:58.163 I 📺 Showing YOLO overlay with 40 regions...
20:20:58.163 I 🎨 showOverlay called with 40 regions
20:20:58.163 I ✅ Overlay permission granted
20:20:58.163 I 🎨 Creating overlay view...
20:20:58.163 I 🎨 Adding view to WindowManager...
20:20:58.164 I WindowManagerGlobal#addView, ty=2038, view=com.quillstudios.pokegoalshelper.DetectionOverlay$OverlayView{700adf4 V.ED..... ........ 0,0-0,0}, caller=android.view.WindowManagerImpl.addView:158 com.quillstudios.pokegoalshelper.DetectionOverlay.showOverlay:61 com.quillstudios.pokegoalshelper.ScreenCaptureService.showYOLODetectionOverlay:838
20:20:58.164 I dVRR is disabled
20:20:58.165 D [NativeCFMS] BpCustomFrequencyManager::BpCustomFrequencyManager()
20:20:58.170 D Input channel constructed: 'edb8d81', fd=165
20:20:58.170 I onStateChanged: host=, from=android.view.ViewRootImpl.setView:1999, state=InsetsState: {mDisplayFrame=Rect(0, 0 - 1080, 2340), mDisplayCutout=DisplayCutout{insets=Rect(0, 84 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(515, 0 - 566, 84), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2340 physicalDisplayWidth=1080 physicalDisplayHeight=2340 density={2.8125} cutoutSpec={M 0,0 H -9.066666666666667 V 29.86666666666667 H 9.066666666666667 V 0 H 0 Z @dp} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}} sideOverrides={}}, mRoundedCorners=RoundedCorners{[RoundedCorner{position=TopLeft, radius=6, center=Point(6, 6)}, RoundedCorner{position=TopRight, radius=6, center=Point(1074, 6)}, RoundedCorner{position=BottomRight, radius=6, center=Point(1074, 2334)}, RoundedCorner{position=BottomLeft, radius=6, center=Point(6, 2334)}]} mRoundedCornerFrame=Rect(0, 0 - 0, 0), mPrivacyIndicatorBounds=PrivacyIndicatorBounds {static bounds=Rect(956, 0 - 1080, 84) rotation=0}, mDisplayShape=DisplayShape{ spec=1406003047 displayWidth=1440 displayHeight=3120 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}, mSources= { InsetsSource: {ac270001 mType=navigationBars mFrame=[0,2205][1080,2340] mVisible=false mFlags= mSideHint=BOTTOM mBoundingRects=null}, InsetsSource: {ac270004 mType=systemGestures mFrame=[0,0][0,0] mVisible=true mFlags= mSideHint=NONE mBoundingRects=null}, InsetsSource: {ac270005 mType=mandatorySystemGestures mFrame=[0,2205][1080,2340] mVisible=true mFlags= mSideHint=BOTTOM mBoundingRects=null}, InsetsSource: {ac270006 mType=tappableElement mFrame=[0,2205][1080,2340] mVisible=true mFlags= mSideHint=BOTTOM mBoundingRects=null}, InsetsSource: {ac270024 mType=systemGestures mFrame=[0,0][0,0] mVisible=true mFlags= mSideHint=NONE mBoundingRects=null}, InsetsSource: {27 mType=displayCutout mFrame=[0,0][1080,84] mVisible=true mFlags= mSideHint=TOP mBoundingRects=null}, InsetsSource: {4be20000 mType=statusBars mFrame=[0,0][1080,84] mVisible=false mFlags= mSideHint=TOP mBoundingRects=null}, InsetsSource: {4be20005 mType=mandatorySystemGestures mFrame=[0,0][1080,118] mVisible=true mFlags= mSideHint=TOP mBoundingRects=null}, InsetsSource: {4be20006 mType=tappableElement mFrame=[0,0][1080,84] mVisible=true mFlags= mSideHint=TOP mBoundingRects=null} }
20:20:58.170 I synced displayState. AttachInfo displayState=2
20:20:58.171 I setView = com.quillstudios.pokegoalshelper.DetectionOverlay$OverlayView@700adf4 IsHRR=false TM=true
20:20:58.171 I ✅ Detection overlay shown successfully with 40 regions
20:20:58.171 I ✅ YOLO overlay show command sent
20:20:58.172 I 📺 Overlay displayed with 40 detections
20:20:58.176 I Skipped 327 frames! The application may be doing too much work on its main thread.
20:20:58.177 I 🎯 Extracting Pokemon info from 40 YOLO detections
20:20:58.179 D 🔍 Upscaled OCR region from 60x52 to 150x130
20:20:58.180 D 🔍 Upscaled OCR region from 61x46 to 150x113
20:20:58.181 D 🔍 Starting OCR for pokemon_species - bitmap: 150x113
20:20:58.181 D 🔍 Starting OCR for pokemon_nickname - bitmap: 150x130
20:20:58.182 I update, w= 274 h= 135 mName = VRI[]@9b22fc mNativeObject= 0xb400007d6c83cfd0 sc.mNativeObject= 0xb400007c6c82d010 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:3386 android.view.ViewRootImpl.relayoutWindow:11361 android.view.ViewRootImpl.performTraversals:4544 android.view.ViewRootImpl.doTraversal:3708 android.view.ViewRootImpl$TraversalRunnable.run:12542 android.view.Choreographer$CallbackRecord.run:1751
20:20:58.182 I Relayout returned: old=(100,284,348,419) new=(100,284,374,419) relayoutAsync=true req=(274,135)0 dur=0 res=0x0 s={true 0xb400007dfc86fdf0} ch=false seqId=0
20:20:58.182 D mThreadedRenderer.updateSurface() mSurface={isValid=true 0xb400007dfc86fdf0}
20:20:58.183 I registerCallbackForPendingTransactions
20:20:58.184 D 🔍 Upscaled OCR region from 85x49 to 150x86
20:20:58.185 W getInterlacedFlag: getMetaData returned 3, defaulting to interlaced_flag = 0
20:20:58.191 I mWNT: t=0xb400007e0c923390 mBlastBufferQueue=0xb400007d6c83cfd0 fn= 6 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.ViewRootImpl$9.onFrameDraw:6276 android.view.ViewRootImpl$3.onFrameDraw:2440 android.view.ThreadedRenderer$1.onFrameDraw:761
20:20:58.192 I [](id:6e1b00000003,api:0,p:0,c:28187) setDequeueTimeout:2077252342
20:20:58.192 I new BLASTBufferQueue, mName= VRI[]@f02991d mNativeObject= 0xb400007d6c871870 sc.mNativeObject= 0xb400007c6c838f50 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:3397 android.view.ViewRootImpl.relayoutWindow:11361 android.view.ViewRootImpl.performTraversals:4544 android.view.ViewRootImpl.doTraversal:3708 android.view.ViewRootImpl$TraversalRunnable.run:12542 android.view.Choreographer$CallbackRecord.run:1751 android.view.Choreographer$CallbackRecord.run:1760 android.view.Choreographer.doCallbacks:1216 android.view.Choreographer.doFrame:1142 android.view.Choreographer$FrameDisplayEventReceiver.run:1707
20:20:58.192 I update, w= 1080 h= 2256 mName = VRI[]@f02991d mNativeObject= 0xb400007d6c871870 sc.mNativeObject= 0xb400007c6c838f50 format= -3 caller= android.graphics.BLASTBufferQueue.<init>:88 android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:3397 android.view.ViewRootImpl.relayoutWindow:11361 android.view.ViewRootImpl.performTraversals:4544 android.view.ViewRootImpl.doTraversal:3708 android.view.ViewRootImpl$TraversalRunnable.run:12542
20:20:58.193 W Access denied finding property "vendor.display.enable_optimal_refresh_rate"
20:20:58.193 W Access denied finding property "vendor.gpp.create_frc_extension"
20:20:58.193 I Relayout returned: old=(0,84,1080,2340) new=(0,84,1080,2340) relayoutAsync=false req=(1080,2256)0 dur=7 res=0x3 s={true 0xb400007dfc83ee80} ch=true seqId=0
20:20:58.193 I performConfigurationChange setNightDimText nightDimLevel=0
20:20:58.193 D mThreadedRenderer.initialize() mSurface={isValid=true 0xb400007dfc83ee80} hwInitialized=true
20:20:58.194 D reportNextDraw android.view.ViewRootImpl.performTraversals:5193 android.view.ViewRootImpl.doTraversal:3708 android.view.ViewRootImpl$TraversalRunnable.run:12542 android.view.Choreographer$CallbackRecord.run:1751 android.view.Choreographer$CallbackRecord.run:1760
20:20:58.194 D Setup new sync=wmsSync-VRI[]@f02991d#4
20:20:58.194 I Creating new active sync group VRI[]@f02991d#5
20:20:58.195 I Davey! duration=2735ms; Flags=0, FrameTimelineVsyncId=30279756, IntendedVsync=155175621440586, Vsync=155178342972315, InputEventId=60591692, HandleInputStart=155178343620751, AnimationStart=155178343639969, PerformTraversalsStart=155178343663199, DrawStart=155178349832938, FrameDeadline=155175629773919, FrameInterval=155178343383980, FrameStartTime=8322727, SyncQueued=155178350008407, SyncStart=155178351366740, IssueDrawCommandsStart=155178351687417, SwapBuffers=155178358569813, FrameCompleted=155178358759553, DequeueBufferDuration=713906, QueueBufferDuration=158125, GpuCompleted=155178358569813, SwapBuffersCompleted=155178358759553, DisplayPresentTime=0, CommandSubmissionCompleted=155178358569813,
20:20:58.197 D 🔍 Starting OCR for nature_name - bitmap: 150x86
20:20:58.199 D registerCallbacksForSync syncBuffer=false
20:20:58.199 I 🎨 Drawing overlay on 1080x2340 screen with 40 regions
20:20:58.204 D Received frameDrawingCallback syncResult=0 frameNum=1.
20:20:58.204 I mWNT: t=0xb400007e0c928950 mBlastBufferQueue=0xb400007d6c871870 fn= 1 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.ViewRootImpl$11.onFrameDraw:15016 android.view.ThreadedRenderer$1.onFrameDraw:761 <bottom of call stack>
20:20:58.204 I Setting up sync and frameCommitCallback
20:20:58.207 W getInterlacedFlag: getMetaData returned 3, defaulting to interlaced_flag = 0
20:20:58.212 I [VRI[]@f02991d#2](f:0,a:0,s:0) onFrameAvailable the first frame is available
20:20:58.212 I apply transaction with the first frame. layerId: 74020, bufferData(ID: 121062243172364, frameNumber: 1)
20:20:58.212 I Received frameCommittedCallback lastAttemptedDrawFrameNum=1 didProduceBuffer=true
20:20:58.212 D CFMS:: SetUp Pid : 28187 Tid : 28337
20:20:58.213 D reportDrawFinished seqId=0
20:20:58.213 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.214 D HWUI - treat SMPTE_170M as sRGB
20:20:58.215 I handleResized, frames=ClientWindowFrames{frame=[100,284][374,419] display=[0,84][1080,2340] parentFrame=[0,0][0,0]} displayId=0 dragResizing=false compatScale=1.0 frameChanged=false attachedFrameChanged=false configChanged=false displayChanged=false compatScaleChanged=false dragResizingChanged=false
20:20:58.215 W getInterlacedFlag: getMetaData returned 3, defaulting to interlaced_flag = 0
20:20:58.221 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.223 D Scheduling upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) with jobId=-2053166472 in 30000ms(Backend next call timestamp 1753730486353). Attempt 1
20:20:58.226 D Scheduling upload for context TransportContext(cct, VERY_LOW, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) with jobId=-2048185735 in 86400000ms(Backend next call timestamp 0). Attempt 1
20:20:58.227 I Davey! duration=2758ms; Flags=1, FrameTimelineVsyncId=30279756, IntendedVsync=155175621440586, Vsync=155178342972315, InputEventId=0, HandleInputStart=155178343620751, AnimationStart=155178343639969, PerformTraversalsStart=155178343663199, DrawStart=155178365911272, FrameDeadline=155175629773919, FrameInterval=155178343383980, FrameStartTime=8322727, SyncQueued=155178369573511, SyncStart=155178370212105, IssueDrawCommandsStart=155178370304449, SwapBuffers=155178378963876, FrameCompleted=155178380181219, DequeueBufferDuration=3564583, QueueBufferDuration=288855, GpuCompleted=155178380181219, SwapBuffersCompleted=155178379286949, DisplayPresentTime=0, CommandSubmissionCompleted=155178378963876,
20:20:58.229 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.235 I Considering local module com.google.mlkit.dynamite.text.latin:10000 and remote module com.google.mlkit.dynamite.text.latin:0
20:20:58.235 I Selected local version of com.google.mlkit.dynamite.text.latin
20:20:58.237 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.241 D Storing event with priority=VERY_LOW, name=FIREBASE_ML_SDK for destination cct
20:20:58.247 D Upload for context TransportContext(cct, VERY_LOW, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.257 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:58.259 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.261 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:58.261 D Load /data/app/~~eM0z8X9FjA3fFK7OI97m2Q==/com.quillstudios.pokegoalshelper-rGliTN33upzid1oG3UPPZg==/base.apk!/lib/arm64-v8a/libmlkit_google_ocr_pipeline.so using ns clns-7 from class loader (caller=/data/app/~~eM0z8X9FjA3fFK7OI97m2Q==/com.quillstudios.pokegoalshelper-rGliTN33upzid1oG3UPPZg==/base.apk!classes13.dex): ok
20:20:58.264 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.265 I I0000 00:00:1753730458.265140 28788 asset_manager_util.cc:59] Created global reference to asset manager.
20:20:58.265 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:58.267 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.269 D Storing event with priority=VERY_LOW, name=FIREBASE_ML_SDK for destination cct
20:20:58.270 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.271 D Upload for context TransportContext(cct, VERY_LOW, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.289 I DeviceManager::DeviceManager
20:20:58.289 W Failed to parse result of GetServerConfigurableFlag, errno=34
20:20:58.289 I findAvailableDevices
20:20:58.304 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.320 W Access denied finding property "ro.mediatek.platform"
20:20:58.340 I I0000 00:00:1753730458.340330 28791 resource_manager.cc:23] Number of optimal threads: 8
20:20:58.341 I I0000 00:00:1753730458.341590 28791 text_detector_thread_pool_context.cc:38] Compute manager max in flight region detector overwrite: 1
20:20:58.341 I I0000 00:00:1753730458.341856 28790 text_classifier.cc:32] Creating classifier TfliteTextClassifier
20:20:58.345 I I0000 00:00:1753730458.345787 28791 common_util.h:38] Resizing Thread Pool: ocr_det_0 to 3
20:20:58.345 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.347 I I0000 00:00:1753730458.347076 28790 common_util.h:38] Resizing Thread Pool: ocr_segm to 3
20:20:58.347 I I0000 00:00:1753730458.347341 28791 tflite_detector_client_with_shape_cache.cc:71] Interpreter threads: 8
20:20:58.347 I Initialized TensorFlow Lite runtime.
20:20:58.352 I I0000 00:00:1753730458.352163 28790 tflite_lstm_client_base.cc:372] Resizing interpreter pool to 4
20:20:58.355 I I0000 00:00:1753730458.355595 28790 multi_pass_line_recognition_mutator.cc:312] Preloading recognizers.
20:20:58.356 I I0000 00:00:1753730458.356001 28790 multi_pass_line_recognition_mutator.cc:319] Preloading a recognizer for "Latn"
20:20:58.357 I Created TensorFlow Lite XNNPACK delegate for CPU.
20:20:58.358 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.358 I I0000 00:00:1753730458.357857 28804 tflite_model_pooled_runner.cc:535] Loading mlkit-google-ocr-models/gocr/gocr_models/line_recognition_legacy_mobile/Latn_ctc/optical/conv_model.fb
20:20:58.358 I I0000 00:00:1753730458.358723 28804 tflite_model_pooled_runner.cc:541] Loading mlkit-google-ocr-models/gocr/gocr_models/line_recognition_legacy_mobile/Latn_ctc/optical/lstm_model.fb
20:20:58.359 I I0000 00:00:1753730458.359493 28791 tflite_detector_client_with_shape_cache.cc:102] Caching size: 10
20:20:58.360 I I0000 00:00:1753730458.360599 28791 tflite_model_pooled_runner.cc:535] Loading mlkit-google-ocr-models/gocr/layout/line_splitting_custom_ops/model.tflite
20:20:58.361 I I0000 00:00:1753730458.361914 28804 tflite_model_pooled_runner.cc:649] Resizing interpreter pool to 4
20:20:58.365 I I0000 00:00:1753730458.365601 28791 tflite_model_pooled_runner.cc:649] Resizing interpreter pool to 1
20:20:58.366 I I0000 00:00:1753730458.366029 28791 tflite_model_pooled_runner.cc:535] Loading mlkit-google-ocr-models/gocr/layout/line_clustering_custom_ops/model.tflite
20:20:58.366 I I0000 00:00:1753730458.366397 28791 tflite_model_pooled_runner.cc:649] Resizing interpreter pool to 1
20:20:58.366 I I0000 00:00:1753730458.366686 28804 mobile_langid_v2.cc:58] MobileLangID V2 initialized.
20:20:58.366 I I0000 00:00:1753730458.366757 28804 multi_pass_line_recognition_mutator.cc:332] Finished preloading a recognizer for "Latn"
20:20:58.366 I I0000 00:00:1753730458.366937 28790 multi_pass_line_recognition_mutator.cc:336] Finished preloading recognizers.
20:20:58.369 I I0000 00:00:1753730458.369616 28788 scheduler.cc:662] ImageMetadata: 150x130
20:20:58.370 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.391 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.412 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.413 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.445 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.447 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.452 I call setFrameRateCategory for touch hint category=no preference, reason=boost timeout, vri=VRI[]@9b22fc
20:20:58.470 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.474 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.494 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.504 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.521 D 🔍 Raw OCR result for pokemon_nickname: '' (blocks: 0)
20:20:58.521 W ⚠️ OCR for pokemon_nickname: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:58.521 D Storing event with priority=VERY_LOW, name=FIREBASE_ML_SDK for destination cct
20:20:58.521 D 🧙 Cleaned result for pokemon_nickname: 'null'
20:20:58.521 W ❌ YOLO FAILED: pokemon_nickname - no text found (conf: 0.98)
20:20:58.522 D 🔍 Upscaled OCR region from 79x43 to 150x81
20:20:58.522 D 🔍 Starting OCR for ability_name - bitmap: 150x81
20:20:58.523 D Upload for context TransportContext(cct, VERY_LOW, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.531 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:58.531 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.532 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.534 D Storing event with priority=VERY_LOW, name=FIREBASE_ML_SDK for destination cct
20:20:58.536 D Upload for context TransportContext(cct, VERY_LOW, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.537 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.564 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.571 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.588 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.605 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.637 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.637 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.670 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.675 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.703 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.737 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.739 D 🔍 Raw OCR result for nature_name: 'Hasty' (blocks: 1)
20:20:58.739 I ✅ OCR SUCCESS for nature_name: 'Hasty' (5 chars)
20:20:58.744 D 🧙 Cleaned result for nature_name: 'Hasty'
20:20:58.746 I ✅ YOLO SUCCESS: nature_name = 'Hasty' (conf: 1.00)
20:20:58.746 D 🔍 Upscaled OCR region from 45x43 to 150x143
20:20:58.748 D 🔍 Starting OCR for original_trainer_name - bitmap: 150x143
20:20:58.752 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:58.752 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.754 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.770 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.787 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.803 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.810 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.845 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.851 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.870 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.872 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.897 D 🔍 Raw OCR result for pokemon_species: '' (blocks: 0)
20:20:58.897 W ⚠️ OCR for pokemon_species: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:58.898 D 🧙 Cleaned result for pokemon_species: 'null'
20:20:58.899 W ❌ YOLO FAILED: pokemon_species - no text found (conf: 0.97)
20:20:58.899 D 🔍 Upscaled OCR region from 56x41 to 150x109
20:20:58.899 D 🔍 Starting OCR for original_trainder_number - bitmap: 150x109
20:20:58.903 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.904 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:58.906 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:58.910 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.927 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.936 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:58.957 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:58.969 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.003 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.021 D 🔍 Raw OCR result for ability_name: '' (blocks: 0)
20:20:59.021 W ⚠️ OCR for ability_name: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:59.023 D 🧙 Cleaned result for ability_name: 'null'
20:20:59.026 W ❌ YOLO FAILED: ability_name - no text found (conf: 0.99)
20:20:59.026 D 🔍 Upscaled OCR region from 61x48 to 150x118
20:20:59.027 D 🔍 Starting OCR for pokemon_level - bitmap: 150x118
20:20:59.031 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:59.036 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.037 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.043 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:59.070 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.072 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.104 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.108 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.136 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.136 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.161 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.169 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.180 D 🔍 Raw OCR result for original_trainer_name: '' (blocks: 0)
20:20:59.180 W ⚠️ OCR for original_trainer_name: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:59.180 D 🧙 Cleaned result for original_trainer_name: 'null'
20:20:59.187 W ❌ YOLO FAILED: original_trainer_name - no text found (conf: 0.99)
20:20:59.196 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.212 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.222 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.236 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.248 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.272 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.277 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.285 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.302 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.308 D 🔍 Raw OCR result for original_trainder_number: '' (blocks: 0)
20:20:59.308 W ⚠️ OCR for original_trainder_number: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:59.308 D 🧙 Cleaned result for original_trainder_number: 'null'
20:20:59.309 W ❌ YOLO FAILED: original_trainder_number - no text found (conf: 0.98)
20:20:59.324 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.345 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.352 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.369 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.379 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.403 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.411 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.435 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.436 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.467 D 🔍 Raw OCR result for pokemon_level: '100' (blocks: 1)
20:20:59.467 I ✅ OCR SUCCESS for pokemon_level: '100' (3 chars)
20:20:59.473 D 🧙 Cleaned result for pokemon_level: '100'
20:20:59.477 I ✅ YOLO SUCCESS: pokemon_level = '100' (conf: 0.71)
20:20:59.479 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.480 D 🔍 Upscaled OCR region from 26x35 to 150x201
20:20:59.481 D 🔍 Starting OCR for hp_value - bitmap: 150x201
20:20:59.488 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:59.493 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:59.495 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.511 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.524 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.547 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.560 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.569 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.602 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.606 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.635 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.645 D 🔍 Raw OCR result for hp_value: '' (blocks: 0)
20:20:59.645 W ⚠️ OCR for hp_value: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:59.646 D 🧙 Cleaned result for hp_value: 'null'
20:20:59.651 W ❌ YOLO FAILED: hp_value - no text found (conf: 0.99)
20:20:59.651 D 🔍 Upscaled OCR region from 25x32 to 150x192
20:20:59.653 D 🔍 Starting OCR for attack_value - bitmap: 150x192
20:20:59.660 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:59.663 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:59.667 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.669 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.694 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.702 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.711 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.737 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.744 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.766 D 🔍 Raw OCR result for attack_value: '' (blocks: 0)
20:20:59.766 W ⚠️ OCR for attack_value: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:59.767 D 🧙 Cleaned result for attack_value: 'null'
20:20:59.769 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.771 W ❌ YOLO FAILED: attack_value - no text found (conf: 0.97)
20:20:59.771 D 🔍 Upscaled OCR region from 24x32 to 150x200
20:20:59.775 D 🔍 Starting OCR for defense_value - bitmap: 150x200
20:20:59.783 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:59.788 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:59.789 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.803 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.817 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.835 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.853 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.878 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.902 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.913 D 🔍 Raw OCR result for defense_value: '' (blocks: 0)
20:20:59.913 W ⚠️ OCR for defense_value: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:20:59.914 D 🧙 Cleaned result for defense_value: 'null'
20:20:59.915 W ❌ YOLO FAILED: defense_value - no text found (conf: 0.98)
20:20:59.915 D 🔍 Upscaled OCR region from 25x30 to 150x180
20:20:59.916 D 🔍 Starting OCR for sp_atk_value - bitmap: 150x180
20:20:59.925 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:20:59.934 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:20:59.938 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.944 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.967 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:20:59.968 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:20:59.989 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.002 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.034 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.037 D 🔍 Raw OCR result for sp_atk_value: '' (blocks: 0)
20:21:00.037 W ⚠️ OCR for sp_atk_value: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:00.037 D 🧙 Cleaned result for sp_atk_value: 'null'
20:21:00.038 W ❌ YOLO FAILED: sp_atk_value - no text found (conf: 0.99)
20:21:00.038 D 🔍 Upscaled OCR region from 24x30 to 150x187
20:21:00.038 D 🔍 Starting OCR for sp_def_value - bitmap: 150x187
20:21:00.052 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:00.054 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.060 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:00.070 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.077 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.101 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.103 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.134 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.143 D 🔍 Raw OCR result for sp_def_value: '' (blocks: 0)
20:21:00.143 W ⚠️ OCR for sp_def_value: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:00.143 D 🧙 Cleaned result for sp_def_value: 'null'
20:21:00.143 W ❌ YOLO FAILED: sp_def_value - no text found (conf: 0.99)
20:21:00.144 D 🔍 Upscaled OCR region from 24x32 to 150x200
20:21:00.144 D 🔍 Starting OCR for speed_value - bitmap: 150x200
20:21:00.149 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:00.158 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:00.159 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.177 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.185 I update, w= 248 h= 135 mName = VRI[]@9b22fc mNativeObject= 0xb400007d6c83cfd0 sc.mNativeObject= 0xb400007c6c82d010 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:3386 android.view.ViewRootImpl.relayoutWindow:11361 android.view.ViewRootImpl.performTraversals:4544 android.view.ViewRootImpl.doTraversal:3708 android.view.ViewRootImpl$TraversalRunnable.run:12542 android.view.Choreographer$CallbackRecord.run:1751
20:21:00.185 I Relayout returned: old=(100,284,374,419) new=(100,284,348,419) relayoutAsync=true req=(248,135)0 dur=0 res=0x0 s={true 0xb400007dfc86fdf0} ch=false seqId=0
20:21:00.185 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.186 D mThreadedRenderer.updateSurface() mSurface={isValid=true 0xb400007dfc86fdf0}
20:21:00.187 I registerCallbackForPendingTransactions
20:21:00.188 W getInterlacedFlag: getMetaData returned 3, defaulting to interlaced_flag = 0
20:21:00.189 I mWNT: t=0xb400007e0c928e90 mBlastBufferQueue=0xb400007d6c83cfd0 fn= 8 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.ViewRootImpl$9.onFrameDraw:6276 android.view.ViewRootImpl$3.onFrameDraw:2440 android.view.ThreadedRenderer$1.onFrameDraw:761
20:21:00.191 I handleResized, frames=ClientWindowFrames{frame=[100,284][348,419] display=[0,84][1080,2340] parentFrame=[0,0][0,0]} displayId=0 dragResizing=false compatScale=1.0 frameChanged=false attachedFrameChanged=false configChanged=false displayChanged=false compatScaleChanged=false dragResizingChanged=false
20:21:00.191 W getInterlacedFlag: getMetaData returned 3, defaulting to interlaced_flag = 0
20:21:00.193 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.201 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.203 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.229 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.234 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.245 D 🔍 Raw OCR result for speed_value: '' (blocks: 0)
20:21:00.245 W ⚠️ OCR for speed_value: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:00.245 D 🧙 Cleaned result for speed_value: 'null'
20:21:00.247 W ❌ YOLO FAILED: speed_value - no text found (conf: 1.00)
20:21:00.248 D 🔍 Upscaled OCR region from 58x44 to 150x113
20:21:00.249 D 🔍 Starting OCR for move_name - bitmap: 150x113
20:21:00.255 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:00.260 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:00.266 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.277 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.301 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.311 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.335 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.352 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.368 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.395 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.402 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.434 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.435 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.467 D 🔍 Raw OCR result for move_name: '' (blocks: 0)
20:21:00.467 W ⚠️ OCR for move_name: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:00.468 D 🧙 Cleaned result for move_name: 'null'
20:21:00.468 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.469 W ❌ YOLO FAILED: move_name - no text found (conf: 1.00)
20:21:00.469 D 🔍 Upscaled OCR region from 69x44 to 150x95
20:21:00.469 D 🔍 Starting OCR for move_name - bitmap: 150x95
20:21:00.471 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:00.473 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:00.484 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.502 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.520 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.534 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.545 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.569 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.576 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.600 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.607 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.632 D 🔍 Raw OCR result for move_name: '' (blocks: 0)
20:21:00.632 W ⚠️ OCR for move_name: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:00.633 D 🧙 Cleaned result for move_name: 'null'
20:21:00.634 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.635 W ❌ YOLO FAILED: move_name - no text found (conf: 0.98)
20:21:00.636 D 🔍 Upscaled OCR region from 82x48 to 150x87
20:21:00.637 D 🔍 Starting OCR for move_name - bitmap: 150x87
20:21:00.643 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:00.652 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.653 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:00.668 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.685 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.701 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.716 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.735 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.764 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.768 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.800 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.811 D 🔍 Raw OCR result for move_name: '' (blocks: 0)
20:21:00.811 W ⚠️ OCR for move_name: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:00.811 D 🧙 Cleaned result for move_name: 'null'
20:21:00.814 W ❌ YOLO FAILED: move_name - no text found (conf: 0.98)
20:21:00.814 D 🔍 Upscaled OCR region from 89x46 to 150x77
20:21:00.815 D 🔍 Starting OCR for move_name - bitmap: 150x77
20:21:00.819 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:00.824 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:00.828 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.842 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.865 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.867 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.900 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.901 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.934 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:00.936 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.958 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:00.967 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.001 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.008 D 🔍 Raw OCR result for move_name: '' (blocks: 0)
20:21:01.008 W ⚠️ OCR for move_name: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:01.008 D 🧙 Cleaned result for move_name: 'null'
20:21:01.011 W ❌ YOLO FAILED: move_name - no text found (conf: 0.97)
20:21:01.011 D 🔍 Upscaled OCR region from 116x48 to 150x62
20:21:01.012 D 🔍 Starting OCR for move_name - bitmap: 150x62
20:21:01.018 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:01.024 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:01.031 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.043 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.061 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.067 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.097 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.100 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.133 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.136 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.149 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.167 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.200 D 🔍 Raw OCR result for move_name: 'Outrage' (blocks: 1)
20:21:01.200 I ✅ OCR SUCCESS for move_name: 'Outrage' (7 chars)
20:21:01.200 D 🧙 Cleaned result for move_name: 'Outrage'
20:21:01.203 I ✅ YOLO SUCCESS: move_name = 'Outrage' (conf: 0.92)
20:21:01.205 D 🔍 Starting OCR for move_name - bitmap: 169x51
20:21:01.211 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.213 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:01.218 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:01.220 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.233 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.248 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.266 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.273 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.296 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.300 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.332 D 🔍 Raw OCR result for move_name: 'Plasma Fists' (blocks: 1)
20:21:01.332 I ✅ OCR SUCCESS for move_name: 'Plasma Fists' (12 chars)
20:21:01.332 D 🧙 Cleaned result for move_name: 'Plasma Fists'
20:21:01.337 I ✅ YOLO SUCCESS: move_name = 'Plasma Fists' (conf: 0.90)
20:21:01.338 D 🔍 Upscaled OCR region from 147x51 to 150x52
20:21:01.339 D 🔍 Starting OCR for move_name - bitmap: 150x52
20:21:01.344 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.346 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:01.351 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:01.354 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.367 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.397 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.401 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.422 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.433 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.439 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.466 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.507 D 🔍 Raw OCR result for move_name: 'Blaze Kick' (blocks: 1)
20:21:01.507 I ✅ OCR SUCCESS for move_name: 'Blaze Kick' (10 chars)
20:21:01.508 D 🧙 Cleaned result for move_name: 'Blaze Kick'
20:21:01.509 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.511 I ✅ YOLO SUCCESS: move_name = 'Blaze Kick' (conf: 0.83)
20:21:01.512 D 🔍 Starting OCR for move_name - bitmap: 201x50
20:21:01.518 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:01.521 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:01.527 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.534 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.556 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.567 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.594 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.600 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.632 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.636 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.667 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.679 D 🔍 Raw OCR result for move_name: 'Close Combat' (blocks: 1)
20:21:01.680 I ✅ OCR SUCCESS for move_name: 'Close Combat' (12 chars)
20:21:01.680 D 🧙 Cleaned result for move_name: 'Close Combat'
20:21:01.682 I ✅ YOLO SUCCESS: move_name = 'Close Combat' (conf: 0.79)
20:21:01.683 D 🔍 Upscaled OCR region from 51x41 to 150x120
20:21:01.685 D 🔍 Starting OCR for type_1 - bitmap: 150x120
20:21:01.693 D Storing event with priority=DEFAULT, name=FIREBASE_ML_SDK for destination cct
20:21:01.698 D Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy5nb29nbGVhcGlzLmNvbS92MGNjL2xvZy9iYXRjaD9mb3JtYXQ9anNvbl9wcm90bzNc) is already scheduled. Returning...
20:21:01.701 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.708 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.732 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.734 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.753 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.766 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.792 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.799 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.821 I Replacing 44 out of 46 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 3 partitions for the whole graph.
20:21:01.832 W Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers
20:21:01.846 D 🔍 Raw OCR result for type_1: '' (blocks: 0)
20:21:01.846 W ⚠️ OCR for type_1: NO TEXT DETECTED - ML Kit found 0 text blocks but text is empty
20:21:01.846 D 🧙 Cleaned result for type_1: 'null'
20:21:01.849 W ❌ YOLO FAILED: type_1 - no text found (conf: 1.00)
20:21:01.850 I 📊 YOLO extraction summary:
20:21:01.850 I Nickname: 'null'
20:21:01.851 I Level: 100
20:21:01.853 I Species: 'null'
20:21:01.853 I Nature: 'Hasty'
20:21:01.853 I Ability: 'null'
20:21:01.854 I Gender: 'null'
20:21:01.854 I Pokeball: 'null'
20:21:01.854 I Types: []
20:21:01.854 I Tera: 'null'
20:21:01.854 I Shiny: false
20:21:01.858 I 🔥 POKEMON DATA EXTRACTED SUCCESSFULLY!
20:21:01.858 I ====== POKEMON INFO EXTRACTED ======
20:21:01.858 I 🎾 Pokeball: null
20:21:01.858 I 📛 Nickname: null
20:21:01.858 I ⚤ Gender: null
20:21:01.858 I 📊 Level: 100
20:21:01.858 I 🌍 Language: EN
20:21:01.858 I 🎮 Game Source: Sword/Shield
20:21:01.858 I ⭐ Favorited: false
20:21:01.858 I 🔢 Dex #: null
20:21:01.859 I 🐾 Species: null
20:21:01.859 I 🏷️ Type 1: null
20:21:01.859 I 🏷️ Type 2: null
20:21:01.859 I 🏆 Stamps: []
20:21:01.859 I 🏷️ Labels: []
20:21:01.859 I ✅ Marks: []
20:21:01.859 I ⚔️ Moves: [Outrage, Plasma Fists, Blaze Kick, Close Combat]
20:21:01.859 I 💪 Ability: null
20:21:01.859 I 🎭 Nature: Hasty
20:21:01.859 I 👤 OT: null
20:21:01.859 I 🔢 ID: null
20:21:01.859 I 🎯 Confidence: 0.57
20:21:01.859 I ====================================
20:21:01.859 D ✅ Analysis cycle complete after 6365ms - ready for next

12
gradle/wrapper/gradle-wrapper.properties

@ -1,6 +1,6 @@
#Thu Jul 24 10:07:43 BST 2025 #Thu Jul 24 10:07:43 BST 2025
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

178
gradlew.bat

@ -1,89 +1,89 @@
@rem @rem
@rem Copyright 2015 the original author or authors. @rem Copyright 2015 the original author or authors.
@rem @rem
@rem Licensed under the Apache License, Version 2.0 (the "License"); @rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License. @rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at @rem You may obtain a copy of the License at
@rem @rem
@rem https://www.apache.org/licenses/LICENSE-2.0 @rem https://www.apache.org/licenses/LICENSE-2.0
@rem @rem
@rem Unless required by applicable law or agreed to in writing, software @rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS, @rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and @rem See the License for the specific language governing permissions and
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%" == "" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@rem @rem
@rem ########################################################################## @rem ##########################################################################
@rem Set local scope for the variables with windows NT shell @rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=. if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter. @rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe @rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo. echo.
echo Please set the JAVA_HOME variable in your environment to match the echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. echo location of your Java installation.
goto fail goto fail
:findJavaFromJavaHome :findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo. echo.
echo Please set the JAVA_HOME variable in your environment to match the echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. echo location of your Java installation.
goto fail goto fail
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if "%ERRORLEVEL%"=="0" goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1 exit /b 1
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal
:omega :omega

2808
opencv/etc/haarcascades/haarcascade_license_plate_rus_16stages.xml

File diff suppressed because it is too large

3010
opencv/etc/lbpcascades/lbpcascade_frontalface.xml

File diff suppressed because it is too large

2938
opencv/etc/lbpcascades/lbpcascade_frontalface_improved.xml

File diff suppressed because it is too large

2550
opencv/etc/lbpcascades/lbpcascade_profileface.xml

File diff suppressed because it is too large

2558
opencv/etc/lbpcascades/lbpcascade_silverware.xml

File diff suppressed because it is too large
Loading…
Cancel
Save