# #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, и это здорово.
Как я могу использовать эту информацию для реализации формулы/уравнения для выбора правильного числа новых результатов анализа крови ?