рд╣рдо рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ REST API рдХреЗ рд░реВрдк рдореЗрдВ ML рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝реНрд▓рдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рддреЗ рд╣реИрдВ


рдкрд░рд┐рдЪрдп


рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд░ рдЬрдЧрд╣ рд╣реИ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдвреВрдВрдврдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдВ рдЬреЛ рдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдж рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЫрд╡рд┐рдпрд╛рдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдкрд╛рда рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВрдЧреЗред


рд╣рдо рдЕрдкрдиреЗ рдЖрд░рдПрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рд╕реНрдХ , рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓рдЯрд░ рдФрд░ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ MongoDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд ResNet50 рдореЙрдбрд▓ рд▓реЗрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣рдо рдХреЗрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз save_model () рдФрд░ load_model () рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рд▓рдЧрднрдЧ 100 рдПрдордмреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдЪрд▓реЛ рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдпрджрд┐ рдЖрдк рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдРрдк .route ('/') рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЙрд╕ рдкрд░ рдПрдХ рдорд╛рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдРрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реЗрд░рд┐рдПрдмрд▓ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:


from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' 

рдЬрдм рдЖрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ 127.0.0.1 : 5000 / рд╣рдо рдЙрддреНрддрд░ рджреЗрдЦреЗрдВрдЧреЗ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб! рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдЪрд▓реЛ рдПрдХ рдкреВрд░реНрдг рдмреИрдХрдПрдВрдб рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


 import os import tensorflow as tf from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image as img from keras.preprocessing.image import img_to_array import numpy as np from PIL import Image from keras.applications.resnet50 import ResNet50,decode_predictions,preprocess_input from datetime import datetime import io from flask import Flask,Blueprint,request,render_template,jsonify from modules.dataBase import collection as db 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдпрд╛рдд рдореЗрдВ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд╣реЛрддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдо рдХреЗрд░рд╕ рдХреЗ рдмреИрдХрдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмрд╣реБ-рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрди ред


 mod = Blueprint('backend', __name__, template_folder='templates', static_folder='./static') UPLOAD_URL = 'http://192.168.1.103:5000/static/' model = ResNet50(weights='imagenet') model._make_predict_function() 

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдб .route ('/') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред Resnet50 рдореЙрдбрд▓, рдкреВрд░реНрд╡- рдХрд▓реНрдкрдирд╛ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд , рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _make_predict_function () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдЪрд░рдг рдХреЗ рдмрд┐рдирд╛, рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдФрд░ рдПрдХ рдЕрдиреНрдп рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


 model = ResNet50(weights='imagenet') 

рдкрд░


 model = load_model('saved_model.h5') 

рдпрд╣рд╛рдВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:


 @mod.route('/predict', methods=['POST']) def predict(): if request.method == 'POST': # ,    if 'file' not in request.files: return "someting went wrong 1" user_file = request.files['file'] temp = request.files['file'] if user_file.filename == '': return "file name not found ..." else: path = os.path.join(os.getcwd()+'\\modules\\static\\'+user_file.filename) user_file.save(path) classes = identifyImage(path) db.addNewImage( user_file.filename, classes[0][0][1], str(classes[0][0][2]), datetime.now(), UPLOAD_URL+user_file.filename) return jsonify({ "status":"success", "prediction":classes[0][0][1], "confidence":str(classes[0][0][2]), "upload_time":datetime.now() }) 

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝реИрдо (file_path) рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 def identifyImage(img_path): image = img.load_img(img_path, target_size=(224,224)) x = img_to_array(image) x = np.expand_dims(x, axis=0) # images = np.vstack([x]) x = preprocess_input(x) preds = model.predict(x) preds = decode_predictions(preds, top=1) print(preds) return preds 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЫрд╡рд┐ рдХреЛ 224 * 224 рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдлрд┐рд░ рд╣рдо рдореЙрдбрд▓.рдкреНрд░рд┐рдХреНрдЯреЗрдб () рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕реНрдб рдЗрдореЗрдЬ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдкрд░ рдХреНрдпрд╛ рд╣реИ (рдПрдХрд▓ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ = 1 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред


Db.addData () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ MongoDB рдореЗрдВ рдЫрд╡рд┐ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ:


 from pymongo import MongoClient from bson import ObjectId client = MongoClient("mongodb://localhost:27017") # host uri db = client.image_predition #Select the database image_details = db.imageData def addNewImage(i_name, prediction, conf, time, url): image_details.insert({ "file_name":i_name, "prediction":prediction, "confidence":conf, "upload_time":time, "url":url }) def getAllImages(): data = image_details.find() return data 

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 from flask import Flask,render_template,jsonify,Blueprint mod = Blueprint('api',__name__,template_folder='templates') from modules.dataBase import collection as db from bson.json_util import dumps @mod.route('/') def api(): return dumps(db.getAllImages()) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдкрд░рд┐рдгрд╛рдо 127.0.0.1 : 5000 / рдПрдкреАрдЖрдИ рдкрддреЗ рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ


рдКрдкрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХреЗрд╡рд▓ рдХреЛрдб рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯреБрдХрдбрд╝реЗ рд╣реИрдВред рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧрд┐рдЯрд╣рдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдФрд░ рдпрд╣рд╛рдВ рдкрд╛рдЗрдордВрдЧреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИред


рд╣рдо рд╕реНрдкрдВрджрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ


рдореЛрдмрд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг REST API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЪрд┐рддреНрд░ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:



ImageData рд╡рд░реНрдЧ рдЫрд╡рд┐ рдбреЗрдЯрд╛ encapsulate:


 import 'dart:convert'; import 'package:http/http.dart' as http; import 'dart:async'; class ImageData { // static String BASE_URL ='http://192.168.1.103:5000/'; String uri; String prediction; ImageData(this.uri,this.prediction); } Future<List<ImageData>> LoadImages() async { List<ImageData> list; //complete fetch .... var data = await http.get('http://192.168.1.103:5000/api/'); var jsondata = json.decode(data.body); List<ImageData> newslist = []; for (var data in jsondata) { ImageData n = ImageData(data['url'],data['prediction']); newslist.add(n); } return newslist; } 

рдпрд╣рд╛рдВ рд╣рдореЗрдВ json рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ ImageData рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ , рдФрд░ рд▓реЛрдбрдЖрдИрдПрдордЖрдИ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлреНрдпреВрдЪрд░ рдмрд┐рд▓реНрдбрд░ рдХреЛ рд▓реМрдЯрд╛рдПрдВ


рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛


 uploadImageToServer(File imageFile) async { print("attempting to connecto server......"); var stream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead())); var length = await imageFile.length(); print(length); var uri = Uri.parse('http://192.168.1.103:5000/predict'); print("connection established."); var request = new http.MultipartRequest("POST", uri); var multipartFile = new http.MultipartFile('file', stream, length, filename: basename(imageFile.path)); //contentType: new MediaType('image', 'png')); request.files.add(multipartFile); var response = await request.send(); print(response.statusCode); } 

рдлреНрд▓рд╛рд╕реНрдХ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдмрдЧ рдореЛрдб рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ ipconfig рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ipv4 рдкрддрд╛ рдвреВрдВрдвреЗрдВред рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 app.run(debug=False, host='192.168.1.103', port=5000) 

рдХрднреА-рдХрднреА рдПрдХ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред




рд╕рднреА рдЖрд╡реЗрджрди рд╕реНрд░реЛрдд рдХреЛрдб github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣рд╛рдВ рд╡реЗ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ:


рдХреЗрд░рд╕: https://keras.io/


рд╕реНрдкрдВрджрди: https://flutter.dev/


MongoDB: https://www.tutorialspoint.com/mongodb/


рд╣рд╛рд░реНрд╡рд░реНрдб рдкрд╛рдпрдерди рдФрд░ рдлреНрд▓рд╛рд╕реНрдХ рдХреЛрд░реНрд╕: https://www.youtube.com/watch?v=j5wysXqaIV8&t=5515s (рд╡реНрдпрд╛рдЦреНрдпрд╛рди 2,3,4 рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ)


рдЧрд┐рдЯрд╣рдм: https://github.com/SHARONZACHARIA

Source: https://habr.com/ru/post/hi460995/


All Articles