Pets Search
Pets Search - Дипломный проект, реализующий сервис для поиска пропавших животных с использованием технологий машинного обучения и распознавания изображений. Приложение предназначено для устройств на платформе Android и помогает находить потерянных питомцев, сравнивая загруженные фотографии с базой найденных животных. В ходе разработки проекта был написан плагин на Java для возможности выбора фотографий на устройстве пользователя
Основные функции:
Загрузка фотографий - Пользователь может загружать фото потерянного животного и подстраивать его положение в рамке для более точного анализа.
Поиск по фото - Приложение отправляет изображение на сервер, где алгоритм машинного обучения ML.NET анализирует его и сопоставляет с базой найденных животных.
История поиска - Возможность повторного просмотра и использования последнего загруженного изображения.
Pets Search демонстрирует интеграцию современных технологий машинного обучения с разработкой мобильных приложений, предоставляя пользователям простой и эффективный инструмент для поиска пропавших животных.
Пример исполнения класса:
using System.Net; using System.Net.Sockets; using System; using UnityEngine; using System.Text; using UnityEngine.UI; using System.IO; using System.Collections.Generic; using System.Drawing; using System.Configuration; public class Server : MonoBehaviour { // адрес и порт сервера, к которому будем подключаться private readonly int _portTCP = 48654; // порт сервера private readonly string _address = "192.168.1.4"; // IP адрес локальной сети //private readonly string _address = "46.48.106.199"; // IP адрес сервера private Socket _socket; private bool _isConnect = false; private bool _isPet = false; private DisplaySearchScene _scene; [SerializeField] private GameObject _content; [SerializeField] private GameObject _prefab; [SerializeField] private Text _textMessage; [SerializeField] private Texture2D[] _texture; /// <summary> /// Отправка данных по TCP /// </summary> public void SendData() { //Включаем окно загрузки _scene = GetComponent<DisplaySearchScene>(); _scene.OnExpectation(); try { _isConnect = true; IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(_address), _portTCP); _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // подключаемся к удаленному хосту _socket.Connect(ipPoint); // отправка фото _socket.Send(Data.imageData); } catch (Exception ex) { CloseSocket(_socket, true); } } private void GetMessage() { // получаем ответ byte[] data = new byte[2048]; // хранилище данных int bytes; StringBuilder builder = new StringBuilder(); do { bytes = _socket.Receive(data, data.Length, 0); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); } while (_socket.Available > 0); //Загрузка полученных данных в текстуру. RawImage image = Instantiate(_prefab, _content.transform).GetComponent<RawImage>(); string number = builder.ToString(); Debug.Log(number); /*Texture2D tex = new Texture2D(800, 800); tex.LoadImage(str); image.texture = tex;*/ image.texture = _texture[Convert.ToInt32(number) - 1]; CloseSocket(_socket, false); _scene.OnResult(); } /// <summary> /// Получаем ответ о прохождении проверки на то, что находится на фото. /// </summary> private void Chek() { //Получаем ответ byte[] data = new byte[125]; //буфер для ответа максимальный объем 1мб StringBuilder builder = new StringBuilder(); do { int bytes = _socket.Receive(data, data.Length, 0); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); } while (_socket.Available > 0); if (builder.ToString() == "true") { _isPet = true; GetMessage(); } if (builder.ToString() == "false") { _isPet = false; _textMessage.text = "Не обнаружено питомца. Попробуйте другое фото"; CloseSocket(_socket, false); _scene.OffExpectation(); } } private void Update() { if (_isConnect) { if (_isPet == false && _socket.Available > 0) { Chek(); } if (_isPet && _socket.Available > 0) { GetMessage(); } } } private void CloseSocket(Socket socket, bool ex) { _isPet = false; _isConnect = false; socket.Shutdown(SocketShutdown.Both); socket.Close(); if (ex) { _textMessage.text = "Не удалось подключиться к серверу"; _scene.OffExpectation(); Debug.Log("Закрыто"); } } }