Skip to content
Snippets Groups Projects
Commit 2da3d3e6 authored by Altair1618's avatar Altair1618
Browse files

refactor: omr testing

parent 693f2a46
Branches refactor/omr-testing
Tags
2 merge requests!57feat: merge release sprint 4,!47refactor: omr testing
...@@ -4,18 +4,19 @@ import android.content.Context ...@@ -4,18 +4,19 @@ import android.content.Context
import android.util.Log import android.util.Log
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import com.google.gson.Gson
import com.k2_9.omrekap.R import com.k2_9.omrekap.R
import com.k2_9.omrekap.data.configs.omr.ContourOMRHelperConfig import com.k2_9.omrekap.data.configs.omr.CircleTemplateLoader
import com.k2_9.omrekap.data.configs.omr.OMRCropper
import com.k2_9.omrekap.data.configs.omr.OMRCropperConfig
import com.k2_9.omrekap.data.configs.omr.OMRSection import com.k2_9.omrekap.data.configs.omr.OMRSection
import com.k2_9.omrekap.utils.SaveHelper import com.k2_9.omrekap.utils.SaveHelper
import com.k2_9.omrekap.utils.omr.ContourOMRHelper import com.k2_9.omrekap.utils.omr.ContourOMRHelper
import com.k2_9.omrekap.utils.omr.OMRConfigDetector
import kotlinx.coroutines.runBlocking
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.opencv.android.OpenCVLoader import org.opencv.android.OpenCVLoader
import org.opencv.android.Utils import org.opencv.android.Utils
import org.opencv.core.Mat
import org.opencv.imgproc.Imgproc
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class ContourOMRHelperTest { class ContourOMRHelperTest {
...@@ -28,44 +29,54 @@ class ContourOMRHelperTest { ...@@ -28,44 +29,54 @@ class ContourOMRHelperTest {
appContext = InstrumentationRegistry.getInstrumentation().targetContext appContext = InstrumentationRegistry.getInstrumentation().targetContext
// Load the image resource as a Bitmap // Load the image resource as a Bitmap
val image = Utils.loadResource(appContext, R.raw.example) val imageMat = Utils.loadResource(appContext, R.raw.example)
val templateLoader = CircleTemplateLoader(appContext, R.raw.circle_template)
val sectionPositions = // Convert if image is not grayscale
mapOf( val grayscaleImageMat = if (imageMat.channels() == 3) {
OMRSection.FIRST to Pair(780, 373), val grayImageMat = Mat()
OMRSection.SECOND to Pair(0, 0), Imgproc.cvtColor(imageMat, grayImageMat, Imgproc.COLOR_BGR2GRAY)
OMRSection.THIRD to Pair(0, 0), grayImageMat
) } else {
imageMat
}
val cropperConfig = runBlocking {
OMRCropperConfig( // Get OMR Config by AprilTag
image, OMRConfigDetector.loadConfiguration(appContext)
Pair(140, 220), val configResult = OMRConfigDetector.detectConfiguration(grayscaleImageMat)
sectionPositions, assert(configResult != null)
)
val cropper = OMRCropper(cropperConfig) val config = configResult!!.first
val config = config.contourOMRHelperConfig.omrCropper.config.setImage(grayscaleImageMat)
ContourOMRHelperConfig( config.templateMatchingOMRHelperConfig.omrCropper.config.setImage(grayscaleImageMat)
cropper, config.templateMatchingOMRHelperConfig.setTemplate(templateLoader)
12,
30, helper = ContourOMRHelper(config.contourOMRHelperConfig)
0.5f, }
1.5f,
0.9f,
230,
)
Log.d("ContourOMRHelperTest", Gson().toJson(config))
helper = ContourOMRHelper(config)
} }
@Test @Test
fun test_detect() { fun test_contour_omr() {
val result = helper.detect(OMRSection.FIRST) val resultFirst = helper.detect(OMRSection.FIRST)
val imageAnnotated = helper.annotateImage(result) val resultSecond = helper.detect(OMRSection.SECOND)
Log.d("ContourOMRHelperTest", result.toString()) val resultThird = helper.detect(OMRSection.THIRD)
assert(result == 172)
SaveHelper.saveImage(appContext, imageAnnotated, "test", "test_detect") val imgFirst = helper.annotateImage(resultFirst)
val imgSecond = helper.annotateImage(resultSecond)
val imgThird = helper.annotateImage(resultThird)
Log.d("ContourOMRHelperTest", resultFirst.toString())
Log.d("ContourOMRHelperTest", resultSecond.toString())
Log.d("ContourOMRHelperTest", resultThird.toString())
SaveHelper.saveImage(appContext, imgFirst, "test", "test_contour_omr_first")
SaveHelper.saveImage(appContext, imgSecond, "test", "test_contour_omr_second")
SaveHelper.saveImage(appContext, imgThird, "test", "test_contour_omr_third")
assert(resultFirst == 172)
assert(resultSecond == 24)
assert(resultThird == 2)
} }
} }
...@@ -5,14 +5,18 @@ import android.graphics.Bitmap ...@@ -5,14 +5,18 @@ import android.graphics.Bitmap
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import com.k2_9.omrekap.R import com.k2_9.omrekap.R
import com.k2_9.omrekap.data.configs.omr.CircleTemplateLoader
import com.k2_9.omrekap.data.configs.omr.OMRCropper import com.k2_9.omrekap.data.configs.omr.OMRCropper
import com.k2_9.omrekap.data.configs.omr.OMRCropperConfig
import com.k2_9.omrekap.data.configs.omr.OMRSection import com.k2_9.omrekap.data.configs.omr.OMRSection
import com.k2_9.omrekap.utils.SaveHelper import com.k2_9.omrekap.utils.SaveHelper
import com.k2_9.omrekap.utils.omr.OMRConfigDetector
import kotlinx.coroutines.runBlocking
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.opencv.android.OpenCVLoader import org.opencv.android.OpenCVLoader
import org.opencv.android.Utils import org.opencv.android.Utils
import org.opencv.core.Mat
import org.opencv.imgproc.Imgproc
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class OMRCropperTest { class OMRCropperTest {
...@@ -25,33 +29,54 @@ class OMRCropperTest { ...@@ -25,33 +29,54 @@ class OMRCropperTest {
appContext = InstrumentationRegistry.getInstrumentation().targetContext appContext = InstrumentationRegistry.getInstrumentation().targetContext
// Load the image resource as a Bitmap // Load the image resource as a Bitmap
val image = Utils.loadResource(appContext, R.raw.example) val imageMat = Utils.loadResource(appContext, R.raw.example)
val templateLoader = CircleTemplateLoader(appContext, R.raw.circle_template)
val sectionPositions =
mapOf( // Convert if image is not grayscale
OMRSection.FIRST to Pair(780, 375), val grayscaleImageMat = if (imageMat.channels() == 3) {
OMRSection.SECOND to Pair(0, 0), val grayImageMat = Mat()
OMRSection.THIRD to Pair(0, 0), Imgproc.cvtColor(imageMat, grayImageMat, Imgproc.COLOR_BGR2GRAY)
) grayImageMat
} else {
val config = imageMat
OMRCropperConfig( }
image,
Pair(140, 225), runBlocking {
sectionPositions, // Get OMR Config by AprilTag
) OMRConfigDetector.loadConfiguration(appContext)
val configResult = OMRConfigDetector.detectConfiguration(grayscaleImageMat)
cropper = OMRCropper(config) assert(configResult != null)
val config = configResult!!.first
config.contourOMRHelperConfig.omrCropper.config.setImage(grayscaleImageMat)
config.templateMatchingOMRHelperConfig.omrCropper.config.setImage(grayscaleImageMat)
config.templateMatchingOMRHelperConfig.setTemplate(templateLoader)
cropper = OMRCropper(config.contourOMRHelperConfig.omrCropper.config)
}
} }
@Test @Test
fun test_crop() { fun test_crop() {
val result = cropper.crop(OMRSection.FIRST) val resultFirst = cropper.crop(OMRSection.FIRST)
val resultSecond = cropper.crop(OMRSection.SECOND)
val resultThird = cropper.crop(OMRSection.THIRD)
val bitmapFirst = Bitmap.createBitmap(resultFirst.cols(), resultFirst.rows(), Bitmap.Config.ARGB_8888)
val bitmapSecond = Bitmap.createBitmap(resultSecond.cols(), resultSecond.rows(), Bitmap.Config.ARGB_8888)
val bitmapThird = Bitmap.createBitmap(resultThird.cols(), resultThird.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(resultFirst, bitmapFirst)
Utils.matToBitmap(resultSecond, bitmapSecond)
Utils.matToBitmap(resultThird, bitmapThird)
val bitmap = Bitmap.createBitmap(result.cols(), result.rows(), Bitmap.Config.ARGB_8888) SaveHelper.saveImage(appContext, bitmapFirst, "test", "test_crop_first.png")
Utils.matToBitmap(result, bitmap) SaveHelper.saveImage(appContext, bitmapSecond, "test", "test_crop_second.png")
SaveHelper.saveImage(appContext, bitmapThird, "test", "test_crop_third.png")
SaveHelper.saveImage(appContext, bitmap, "test", "test_crop.png") assert(resultFirst.width() == 80 && resultFirst.height() == 124)
assert(result.width() == 140 && result.height() == 225) assert(resultSecond.width() == 80 && resultSecond.height() == 124)
assert(resultThird.width() == 80 && resultThird.height() == 124)
} }
} }
...@@ -11,17 +11,20 @@ import com.k2_9.omrekap.data.configs.omr.OMRCropperConfig ...@@ -11,17 +11,20 @@ import com.k2_9.omrekap.data.configs.omr.OMRCropperConfig
import com.k2_9.omrekap.data.configs.omr.OMRSection import com.k2_9.omrekap.data.configs.omr.OMRSection
import com.k2_9.omrekap.data.configs.omr.TemplateMatchingOMRHelperConfig import com.k2_9.omrekap.data.configs.omr.TemplateMatchingOMRHelperConfig
import com.k2_9.omrekap.utils.SaveHelper import com.k2_9.omrekap.utils.SaveHelper
import com.k2_9.omrekap.utils.omr.ContourOMRHelper
import com.k2_9.omrekap.utils.omr.OMRConfigDetector
import com.k2_9.omrekap.utils.omr.TemplateMatchingOMRHelper import com.k2_9.omrekap.utils.omr.TemplateMatchingOMRHelper
import kotlinx.coroutines.runBlocking
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.opencv.android.OpenCVLoader import org.opencv.android.OpenCVLoader
import org.opencv.android.Utils import org.opencv.android.Utils
import org.opencv.core.Mat import org.opencv.core.Mat
import org.opencv.imgproc.Imgproc
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class TemplateMatchingOMRHelperTest { class TemplateMatchingOMRHelperTest {
private var helper: TemplateMatchingOMRHelper private var helper: TemplateMatchingOMRHelper
private val image: Mat
private val appContext: Context private val appContext: Context
init { init {
...@@ -29,44 +32,55 @@ class TemplateMatchingOMRHelperTest { ...@@ -29,44 +32,55 @@ class TemplateMatchingOMRHelperTest {
appContext = InstrumentationRegistry.getInstrumentation().targetContext appContext = InstrumentationRegistry.getInstrumentation().targetContext
// Load the image resource // Load the image resource as a Bitmap
image = Utils.loadResource(appContext, R.raw.example) val imageMat = Utils.loadResource(appContext, R.raw.example)
val templateLoader = CircleTemplateLoader(appContext, R.raw.circle_template)
val sectionPositions =
mapOf(
OMRSection.FIRST to Pair(780, 373),
OMRSection.SECOND to Pair(0, 0),
OMRSection.THIRD to Pair(0, 0),
)
val cropperConfig = // Convert if image is not grayscale
OMRCropperConfig( val grayscaleImageMat = if (imageMat.channels() == 3) {
image, val grayImageMat = Mat()
Pair(140, 220), Imgproc.cvtColor(imageMat, grayImageMat, Imgproc.COLOR_BGR2GRAY)
sectionPositions, grayImageMat
) } else {
imageMat
}
val cropper = OMRCropper(cropperConfig) runBlocking {
// Get OMR Config by AprilTag
OMRConfigDetector.loadConfiguration(appContext)
val configResult = OMRConfigDetector.detectConfiguration(grayscaleImageMat)
assert(configResult != null)
// Load the template image resource val config = configResult!!.first
val templateLoader = CircleTemplateLoader(appContext, R.raw.circle_template)
val config = config.contourOMRHelperConfig.omrCropper.config.setImage(grayscaleImageMat)
TemplateMatchingOMRHelperConfig( config.templateMatchingOMRHelperConfig.omrCropper.config.setImage(grayscaleImageMat)
cropper, config.templateMatchingOMRHelperConfig.setTemplate(templateLoader)
templateLoader,
0.7f,
)
helper = TemplateMatchingOMRHelper(config) helper = TemplateMatchingOMRHelper(config.templateMatchingOMRHelperConfig)
}
} }
@Test @Test
fun test_detect() { fun test_template_matching_omr() {
val result = helper.detect(OMRSection.FIRST) val resultFirst = helper.detect(OMRSection.FIRST)
val imgRes = helper.annotateImage(result) val resultSecond = helper.detect(OMRSection.SECOND)
Log.d("TemplateMatchingOMRHelperTest", result.toString()) val resultThird = helper.detect(OMRSection.THIRD)
SaveHelper.saveImage(appContext, imgRes, "test", "test_detect")
assert(result == 172) val imgFirst = helper.annotateImage(resultFirst)
val imgSecond = helper.annotateImage(resultSecond)
val imgThird = helper.annotateImage(resultThird)
Log.d("TemplateMatchingOMRHelperTest", resultFirst.toString())
Log.d("TemplateMatchingOMRHelperTest", resultSecond.toString())
Log.d("TemplateMatchingOMRHelperTest", resultThird.toString())
SaveHelper.saveImage(appContext, imgFirst, "test", "test_template_matching_omr_first")
SaveHelper.saveImage(appContext, imgSecond, "test", "test_template_matching_omr_second")
SaveHelper.saveImage(appContext, imgThird, "test", "test_template_matching_omr_third")
assert(resultFirst == 172)
assert(resultSecond == 24)
assert(resultThird == 2)
} }
} }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment