This shows you the differences between two versions of the page.
pm:prj2023:apredescu:barbuta.cristian [2023/05/29 02:43] 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 | ||
- | ===== Rezultate Obţinute ===== | + | <code cpp> |
+ | char processFrame() { | ||
+ | processedByteCountDuringCameraRead = 0; | ||
+ | commandStartNewFrame(uartPixelFormat); | ||
+ | noInterrupts(); | ||
+ | processFrameData(); | ||
+ | interrupts(); | ||
+ | frameCounter++; | ||
+ | commandDebugPrint("Frame " + String(frameCounter)/* + " " + String(processedByteCountDuringCameraRead)*/); | ||
+ | |||
+ | // wait for the server to check the frame | ||
+ | while(!Serial.available()){} | ||
+ | char serverResponse = Serial.read(); | ||
- | <note tip> | + | return serverResponse; |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | } |
- | </note> | + | </code> |
- | ===== Concluzii ===== | + | * 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); | ||
- | ===== Download ===== | + | // Read the image file as bytes |
+ | byte[] imageData = Files.readAllBytes(newFile.toPath()); | ||
- | <note warning> | + | // Encode the image bytes as Base64 |
- | 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ă ;-). | + | String base64Image = Base64.getEncoder().encodeToString(imageData); |
- | 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*. | + | // Set up the URL and connection |
- | </note> | + | 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); | ||
- | ===== Jurnal ===== | + | // Create the JSON payload |
+ | JSONObject jsonPayload = new JSONObject(); | ||
+ | jsonPayload.put("image", base64Image); | ||
+ | |||
+ | // Write the JSON payload to the request body | ||
+ | OutputStream outputStream = connection.getOutputStream(); | ||
+ | outputStream.write(jsonPayload.toString().getBytes()); | ||
+ | outputStream.flush(); | ||
+ | |||
+ | // 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 ===== |