В настоящее время правда о машинном обучении или глубоком обучении состоит в том, что все хотят его изучить, но проблема в следующем:
Не только OCR, но и для большинства вещей. Сегодня я научу вас делать предсказания в реальном времени и предсказания на загруженном изображении.
Хорошо, давай пристегнитесь, чтобы получить кое-что интересное и побольше лекций по теории.
Делайте прогнозы на основе загруженного изображения
Необходимые библиотеки:
- Tensorflow
- OpenCV
- Керас
Вы можете скачать их с помощью команды pip и даже с файлом .whl.
После обучения модели Запустите следующий код, который сохранит вашу модель машинного обучения.
model.save("MODEL_NAME.model")
Эта команда сохранит вашу модель в текущем рабочем каталоге, куда вставлен ваш код. Теперь загрузите изображение, предсказываемое вашей моделью, поместите его в текущий рабочий каталог и вставьте следующий код.
import tensorflow as tf import cv2 labels=[] #Create A List Of Labels that Your model Is trained eg: Cats,Dogs,etc def prepare(filepath): img_size= #You enter the number of Your Input Shape img_array=cv2.imread(filepath,cv2.IMREAD_GRAYSCALE) new_array=cv2.resize(img_array,(img_size,img_size)) return new_array.reshape(-1,img_size,img_size,1) model=tf.keras.models.load_model('Your_Model_Name.model') prediction=model.predict([prepare('Your_Image_Name')]) print(prediction)
Таким образом, ваша вероятность предсказания всех этикеток будет напечатана здесь, а индекс с наибольшей вероятностью - это то, что предсказала ваша модель машинного обучения.
Прогнозы в реальном времени с использованием Flask, открытое резюме
Необходимые библиотеки для прогнозирования в реальном времени:
- Колба
- OpenCV
- Numpy
- Соответствующий XML-файл для вашего прогноза, но тот, который я использовал для прогнозирования, - «haarcascade_frontalface_default.xml», который легко доступен в Интернете.
Создайте папку, поместите 3 блока кода и запустите main.py. У вас также должна быть ваша модель в той же папке, что и файл JSON модели, находящийся в той же папке.
Этот код ниже - это код, в который загружается ваша модель и делается прогноз. Вы можете сохранить его под именем «model.py»
from keras.models import model_from_json import numpy as np class FacialExpressionModel(object): labels = []# Your Labels List def __init__(self, model_json_file, model_weights_file): # load model from JSON file with open(model_json_file, "r") as json_file: loaded_model_json = json_file.read() self.loaded_model = model_from_json(loaded_model_json) # load weights into the new model self.loaded_model.load_weights(model_weights_file) self.loaded_model._make_predict_function() def predict_emotion(self, img): self.preds = self.loaded_model.predict(img) return FacialExpressionModel.labels[np.argmax(self.preds)]
Следующий код, который вы вставите, - это тот, который заставляет вашу видеокамеру делать прогнозы в реальном времени. XML также должен храниться в текущем Справочнике. Таким образом, этот код нарисует рамку вокруг объекта и напишет, что он предсказывает.
import cv2 from model import FacialExpressionModel import numpy as np facec = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') model = FacialExpressionModel("model.json", "model_weights.h5") font = cv2.FONT_HERSHEY_SIMPLEX class VideoCamera(object): def __init__(self): self.video = cv2.VideoCapture(0) def __del__(self): self.video.release() # returns camera frames along with bounding boxes and predictions def get_frame(self): _, fr = self.video.read() gray_fr = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) faces = facec.detectMultiScale(gray_fr, 1.3, 5) for (x, y, w, h) in faces: fc = gray_fr[y:y+h, x:x+w] roi = cv2.resize(fc, (48, 48)) pred = model.predict_emotion(roi[np.newaxis, :, :, np.newaxis]) cv2.putText(fr, pred, (x, y), font, 1, (255, 255, 0), 2) cv2.rectangle(fr,(x,y),(x+w,y+h),(255,0,0),2) _, jpeg = cv2.imencode('.jpg', fr) return jpeg.tobytes()
Последний шаг: мы будем использовать Flask, чтобы поместить оба кода в браузер, и протестируем нашу модель.
Перед этим создайте папку с именем Templates с html-страницей с именем «index.html». Вы можете изменить ее имя, но вам придется сохранить свое имя в main.py вместо index.html.
Код для index.html:
<html> <head> <title>Face expression recognition</title> </head> <body> <img id="bg" width=1200px height=900px src="{{ url_for('video_feed') }}"> </body> </html>
Код для main.py приведен ниже, просто скопируйте его и запустите
from flask import Flask, render_template, Response from camera import VideoCamera app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') def gen(camera): while True: frame = camera.get_frame() yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') @app.route('/video_feed') def video_feed(): return Response(gen(VideoCamera()), mimetype='multipart/x-mixed-replace; boundary=frame') if __name__ == '__main__': app.run(host='0.0.0.0')
После запуска приведенного выше кода Python создаст локальный сервер на порту 5000, поэтому введите его в Интернете, чтобы открыть камеру для прогнозов.
localhost:5000
Я надеюсь, что вы все правильно поняли, и если у вас возникнут проблемы, вы можете связаться со мной по адресу