Как я могу использовать прогнозы коленных чашечек для выбора правильной позиции текста в Google Vision OCR?

# #python #scikit-learn #prediction #training-data #google-cloud-vision

Вопрос:

Я использую Google Vision OCR для анализа крови. Пользователи могут сфотографировать результаты своей крови, и моя задача-извлечь значимую информацию.

Например, на рисунке ниже я, возможно, захочу извлечь число, связанное с ТТГ (здесь: 0,722).

Пример:

введите описание изображения здесь

Но фотографии, которые я получаю, никогда не бывают такими прямыми, они часто кривые. И я не могу получить правильное распознавание «строка за строкой» от Google. Все, что у меня есть, — это координаты всех слов/чисел.

Чтобы получить правильный номер, связанный с TSH (например) Я собрал более 300 результатов анализа крови. Я собрал 3 типа информации по каждому из них:

  • во-первых, прямое расстояние между положением слова TSH и положением каждого числа на странице.
  • во-вторых, ортогональное расстояние от положения слова TSH и положения каждого числа на странице.
  • и, наконец, логическое значение : 0, если число НЕ является TSH значением, 1, если это так.

Это составляет мой набор данных. Я могу выглядеть так:

 22.17605594351686,22.156573116691284,0
40.390995176389076,4.948301329394384,0
42.816362012232894,5.169867060561296,0
39.66602473983306,2.4372230428360426,0
58.589347000389644,2.141802067946825,0
65.27678257473366,2.141802067946825,0
39.34331591288292,0.07385524372230544,1
58.42795056763215,0.4431314623338253,0
62.14532216492161,0.4431314623338253,0
39.35232078475228,2.3633677991137336,0
58.98873313300486,2.8064992614475623,0
61.65003480785281,2.8064992614475623,0
 

Следующий шаг: я тренирую модель с помощью классификатора scikit-learn и KNeighbors.

Here’s my code so far:

 import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score


def run_model(data):
    cols = [col for col in data.columns if col not in ['winner']]
    target = data['winner']
    data = data[cols]

    data_train, data_test, target_train, target_test = train_test_split(data, target, test_size=0.30, random_state=10)

    # create object of the Classifier
    neigh = KNeighborsClassifier(n_neighbors=3)
    # Train the algorithm
    neigh.fit(data_train, target_train)
    # predict the response
    pred = neigh.predict(data_test)

    # evaluate accuracy
    return accuracy_score(target_test, pred)


def main():
    items = ['TSH']
    for item in items:
        data = pd.read_csv(f'./data/{item}.csv')
        result = run_model(data)
        print(f"KNeighbors accuracy score for {item}: {result}")
 

Цель здесь состояла в том, чтобы предсказать, является ли определенное число на странице (на основе расстояния и ортогонального расстояния) правильным числом (1) или нет (0). И, судя по показателю точности, это работает. Мне около 99,5, и это здорово.

Как я могу использовать эту информацию для реализации формулы/уравнения для выбора правильного числа новых результатов анализа крови ?