This shows you the differences between two versions of the page.
|
pm:prj2023:apredescu:barbuta.cristian [2023/05/29 02:45] cristian.barbuta [Organizarea Codului] |
pm:prj2023:apredescu:barbuta.cristian [2023/05/29 07:32] (current) paul.nicolae [Rezultate Obţinute] |
||
|---|---|---|---|
| Line 114: | Line 114: | ||
| } | } | ||
| </code> | </code> | ||
| - | * In cadrul acestui cod, functia "initializeScreenAndCamera()" a fost lasata intacta, in schimb ceea ce am modificat din cadrul "bibliotecii" pe care am gasit-o, a fost functia "processFrame()" | + | * Se asteapta pana cand sensorul infra-rosu detecteaza ceva la 20cm distanta, camera incepe sa inregistreze, iar in cazul in care un frame contine fata unei persoane autorizate serverResponse va deveni 1 iar incuietoarea se va deschide pentru cateva secunde. |
| + | * In cadrul acestui cod, functia "initializeScreenAndCamera()" a fost lasata intacta, in schimb ceea ce am modificat din aceasta "biblioteca", a fost functia "processFrame()" unde am impus asteptarea unui raspuns pe portul serial | ||
| <code cpp> | <code cpp> | ||
| Line 134: | Line 135: | ||
| </code> | </code> | ||
| - | ===== Rezultate Obţinute ===== | + | * Aici, fiecare frame este trimis pe portul serial unde ajunge sa fie procesat de o aplicatie in Java si ulterior trimis catre backend |
| + | === Java === | ||
| + | Functia adaugata de mine este urmatoarea: | ||
| + | <code java> | ||
| + | private void sendImageToServer(BufferedImage image, File toFolder) { | ||
| + | try { | ||
| + | // Save image to PNG file | ||
| + | File newFile = new File(toFolder.getAbsolutePath(), getNextFileName()); | ||
| + | ImageIO.write(image, "png", newFile); | ||
| - | <note tip> | + | // Read the image file as bytes |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | byte[] imageData = Files.readAllBytes(newFile.toPath()); |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | // Encode the image bytes as Base64 |
| + | String base64Image = Base64.getEncoder().encodeToString(imageData); | ||
| - | ===== Download ===== | + | // Set up the URL and connection |
| + | URL url = new URL("http://localhost:5000/upload"); | ||
| + | HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | ||
| + | connection.setRequestMethod("POST"); | ||
| + | connection.setRequestProperty("Content-Type", "application/json"); | ||
| + | connection.setDoOutput(true); | ||
| - | <note warning> | + | // Create the JSON payload |
| - | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | JSONObject jsonPayload = new JSONObject(); |
| + | jsonPayload.put("image", base64Image); | ||
| - | Fişierele se încarcă pe wiki folosind facilitatea *Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul *:pm:prj20??:c?* sau *:pm:prj20??:c?:nume_student** (dacă este cazul). *Exemplu:* Dumitru Alin, 331CC -> *:pm:prj2009:cc:dumitru_alin*. | + | // Write the JSON payload to the request body |
| - | </note> | + | OutputStream outputStream = connection.getOutputStream(); |
| + | outputStream.write(jsonPayload.toString().getBytes()); | ||
| + | outputStream.flush(); | ||
| - | ===== Jurnal ===== | + | // Read the response from the server |
| + | int responseCode = connection.getResponseCode(); | ||
| + | if (responseCode == HttpURLConnection.HTTP_OK) { | ||
| + | System.out.println("Server response: OK"); | ||
| + | serialReader.sendResponse(1); | ||
| + | } else { | ||
| + | System.out.println("Unexpected server response code: " + responseCode); | ||
| + | serialReader.sendResponse(0); | ||
| + | } | ||
| + | |||
| + | // Close the connection | ||
| + | connection.disconnect(); | ||
| + | |||
| + | saveCountLabel.setText(" (" + (++saveCounter) + ")"); | ||
| + | } catch (IOException e) { | ||
| + | System.out.println("Sending file failed: " + e.getMessage()); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | * Aici are log un request http in urma caruia se transmite inapoi la placuta raspunsul serverului | ||
| + | |||
| + | === Flask - Flutter === | ||
| + | |||
| + | Am facut o aplicatie full-stack minimalista care are urmatoarele functionalitati in cadrul proiectului | ||
| + | * listarea persoanelor autorizate | ||
| + | * adaugarea de persoane autorizate: Nume - Selfie | ||
| + | * stergerea de persoane autorizate | ||
| + | * recunoasterea persoanelor autorizate | ||
| + | |||
| + | |||
| + | |||
| + | ===== Rezultate Obţinute ===== | ||
| + | |||
| + | In urma proiectului, am obtinut o usa inteligenta care permite intrarea persoanelor autorizate si o aplicatie mobila pentru gestionarea usii. | ||
| + | |||
| + | {{ pm:prj2023:apredescu:app_3.jpeg?700 |}} | ||
| + | {{ pm:prj2023:apredescu:app_2.jpeg?300 |}} | ||
| + | {{ pm:prj2023:apredescu:app_1.jpeg?300 |}} | ||
| + | {{ pm:prj2023:apredescu:app_4.jpeg?300 |}} | ||
| + | * videoclip cu functionalitatea | ||
| + | * <a>https://drive.google.com/file/d/1ctDuG0gpRxGoAZwBggntORs-Z0veVhDa/view?usp=sharing</a> | ||
| + | |||
| + | ===== Concluzii ===== | ||
| + | A fost un proiect interesant in care am intampinat foarte multe probleme din care am putut invata. Totodata, pe langa cunostintele practice obtinute, am dobandit si o intelegere teoretica asupra diferitelor concepte utilizate. | ||
| + | ===== Download ===== | ||
| + | {{ pm:prj2023:apredescu:barbuta_app_final.zip |}} | ||
| + | {{ pm:prj2023:apredescu:barbuta_arduino.zip |}} | ||
| + | {{ pm:prj2023:apredescu:barbuta_java_final.zip |}} | ||
| - | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
| - | </note> | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||