20.68.131.221

As of: Jul 19, 2025 10:52am UTC | Latest

Basic Information

Forward DNS
services.mavistech.cloud, anytest.mavistech.cloud, ocr.mavistech.cloud, assistant.mavistech.cloud, face.mavistech.cloud, ...
Routing
20.64.0.0/10  via MICROSOFT-CORP-MSN-AS-BLOCK, US (AS8075)
OS
Ubuntu Linux
Services (9)
22/SSH, 80/HTTP, 443/HTTP, 5000/HTTP, 5001/HTTP, 5002/HTTP, 5005/HTTP, 8001/HTTP, 8002/HTTP
Labels
Bootstrap Default Landing Page Remote Access

SSH 22/TCP
07/18/2025 13:04 UTC

Remote Access

Software

Ubuntu Linux
OpenBSD OpenSSH 9.6p1

Details

Host Key
Algorithm
ecdsa-sha2-nistp256
Fingerprint
bdbd4015cfb8d48b42180bcbac017ca3c0958b14837b78943f23dd331428dbc9
Negotiated
Key Exchange
[email protected]
Symmetric Cipher
aes128-ctr [] aes128-ctr []
MAC
hmac-sha2-256 [] hmac-sha2-256 []

HTTP 80/TCP
07/19/2025 06:48 UTC

Default Landing Page

Software

linux
nginx 1.24.0

Details

http://20.68.131.221/
Status
200  OK
Body Hash
sha1:c51a3f0e6de4eb802d5630941c3fd9e1d0efae4b
HTML Title
Welcome to nginx!
Response Body
      # Welcome to nginx!

If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.

For online documentation and support please refer to
[nginx.org](http://nginx.org/).  
Commercial support is available at [nginx.com](http://nginx.com/).

_Thank you for using nginx._
    

HTTP 443/TCP
07/19/2025 04:47 UTC


Software

linux
nginx 1.24.0

Details

https://20.68.131.221/
Status
502  Bad Gateway
Body Hash
sha1:4227bb1e60f7fd4295b358e51e5fc9a54c37f910
HTML Title
502 Bad Gateway
Response Body
      # 502 Bad Gateway

* * *

nginx/1.24.0 (Ubuntu)
    

TLS

Handshake
Version Selected
TLSv1_3
Cipher Selected
TLS_CHACHA20_POLY1305_SHA256
Certificate
Fingerprint
5f01e82c05e8b7117b430bbb6a5ed67677c518d00f8b36bc79b9be4b453683a6
Subject
CN=anytest.mavistech.cloud
Issuer
C=US, O=Let's Encrypt, CN=E6
Names
anytest.mavistech.cloud
Fingerprint
JARM
27d40d40d00040d00042d43d000000d2e61cae37a985f75ecafb81b33ca523
JA3S
475c9302dc42b2751db9edcac3b74891
JA4S
t130200_1303_a56c5b993250

HTTP 5000/TCP
07/19/2025 07:39 UTC


Software

PalletsProjects Werkzeug 3.1.3

Details

http://20.68.131.221:5000/
Status
200  OK
Body Hash
sha1:4698154328131a2ad6155fc1ec4d30b5cdd7275e
HTML Title
Stateful Navigation API (Split Audio/Data + Integrated Milestones)
Response Body
      # Stateful Navigation API (Split Audio/Data + Integrated Milestones)

API for audio-driven, turn-by-turn navigation. Uses a **split audio/data
flow** for initiation. Navigation steps are provided intelligently based on
proximity/time. Nearby user-defined Milestones are announced directly within
navigation instructions.

## Core Details

  * **Base URL:** `http://20.68.131.221:5000`
  * **Authentication:** Requires `Authentication: YOUR_USER_ID` header for all endpoints.
  * **Input Audio:** Raw binary to `/upload_audio`.
  * **Output Audio:** Base64 encoded WAV (16Khz, 16-bit Mono PCM) in JSON responses.
  * **Data Requests:** Use `application/json` for location/context endpoints.

* * *

## Audio Navigation Workflow

The main flow involves multiple steps due to separate audio/data submission
and the stateful step loop:

### Step 1: Upload Query Audio

`POST /upload_audio`

Uploads the user's spoken destination query.

#### Input

  * **Header:** `Authentication: YOUR_USER_ID`
  * **Body:** Raw binary audio data.

#### Output (JSON)

    
    
    { "status": "AudioReceived", "upload_id": "up_..." }

Save the `upload_id`.

### Step 2: Send Location for Query

`POST /process_query_location`

Processes the query using the uploaded audio and location. Fetches milestones
if navigation starts.

#### Input (`application/json`)

    
    
    {
        "upload_id": "up_...", // From Step 1
        "latitude": float,
        "longitude": float,
        "heading": float // Optional
    }

#### Output (JSON) - Key Scenarios

  * Status: "AwaitingSelection"
    * POI options found. Play `audio_response_b64` or use TTS on `prompt_text`.
    * Save `state_id` (e.g., `poi_...`) for Step 4.
  * Status: "NavigationStarted"
    * Direct navigation begins.
    * Play `initial_audio_steps_b64` list or use TTS on `initial_steps_text` list (first few steps, may include milestone announcements at the start).
    * Save `navigation_session_id` (e.g., `nav_...`) for Step 5 onwards.
  * Status: "Error" (4xx/5xx) 
    * Play `audio_response_b64` or use TTS on `error_message`.

* * *

**\--- If Status was "AwaitingSelection", proceed to Steps 3 & 4 ---**

### Step 3: Upload Selection Audio

`POST /upload_audio`

Uploads the user's spoken POI option number.

#### Input

  * **Header:** `Authentication: YOUR_USER_ID`
  * **Body:** Raw binary audio data.

#### Output (JSON)

    
    
    { "status": "AudioReceived", "upload_id": "up_..." }

Save the NEW `upload_id`.

### Step 4: Send Selection Context

`POST /process_selection_location`

Processes the selection, starts navigation, and fetches milestones.

#### Input (`application/json`)

    
    
    {
        "upload_id": "up_...", // From Step 3
        "state_id": "poi_..."  // From Step 2
    }

#### Output (JSON) - Key Scenarios

  * Status: "NavigationStarted"
    * POI selected. Navigation begins.
    * Play `initial_audio_steps_b64` list or use TTS on `initial_steps_text` list (first few steps, may include milestone announcements at the start).
    * Save `navigation_session_id` (e.g., `nav_...`) for Step 5 onwards.
  * Status: "Error" (4xx/5xx) 
    * Selection failed. Play `audio_response_b64` or use TTS on `error_message`.
    * May return original `state_id` for retry of Steps 3 & 4.

* * *

**\--- If Status was "NavigationStarted" (from Step 2 or Step 4), proceed to
Step 5 ---**

### Step 5: Get Next Steps (Repeat with Smart Logic + Integrated Milestones)

`POST /get_next_steps`

Call periodically (e.g., every 5-10s). Server checks proximity to next turn
AND nearby milestones, returning relevant instructions only.

#### Input: `application/json`

    
    
    {
        "navigation_session_id": "nav_...", // Session ID from Step 2 or 4
        "latitude": CURRENT_LATITUDE,
        "longitude": CURRENT_LONGITUDE,
        "heading": CURRENT_HEADING // Optional
    }

#### Output (JSON) - Key Scenarios (200 OK)

  * Status: "NextSteps"
    * **Condition:** User near next maneuver OR time threshold met.
    * **Action:** Play `audio_steps_b64` list or use TTS on `steps_text` list. Nearby milestone announcements (e.g., "Park Gate ahead.") will be included as items at the beginning of these lists if applicable.
    * Repeat Step 5.
  * Status: "ApproachingDestination"
    * **Condition:** Same as "NextSteps", but batch includes arrival step.
    * **Action:** Play `audio_steps_b64` / use TTS on `steps_text`. Milestone announcements may be prepended.
    * Repeat Step 5 (optional).
  * Status: "OnRoute"
    * **Condition:** No new navigation step needed yet.
    * **Action:** Play optional `audio_message_b64` or use TTS on `message`. This message will include nearby milestone announcements prepended if applicable (e.g., "Library to your right. Continue. Next turn in 80 meters.").
    * Repeat Step 5.
  * Status: "Arrived"
    * **Condition:** Server determines arrival.
    * **Action:** Play `audio_message_b64` OR use TTS on `message`.
    * Stop calling this endpoint.
  * Status: "Error" (4xx/5xx) 
    * **Condition:** Session invalid, internal error, etc.
    * **Action:** Use TTS on `error_message`.
    * Stop calling this endpoint.

Milestone announcements are now part of the main audio/text fields, not a
separate list.

* * *

## Other Endpoints

### Text POI Search

`POST /search_poi`

(Stateless) Input JSON: {"query", "latitude", "longitude"}. Returns JSON:
{"status":"ok", "results": [...]}.

### Start Text Navigation

`POST /navigate`

(Starts stateful session) Input JSON: {"destination_query", ...}. Returns
JSON: {"status":"NavigationStarted", "navigation_session_id", ...}. Use
`/get_next_steps` to continue.

### API Documentation

`GET /`

Returns this HTML documentation.
    

HTTP 5001/TCP
07/19/2025 09:24 UTC


Software

PalletsProjects Werkzeug 3.1.3

Details

http://20.68.131.221:5001/
Status
200  OK
Body Hash
sha1:9747567304e9a82322117b5a3500a28bef910591
HTML Title
Voice Assistant API (Binary V3)
Response Body
      # Voice Assistant API (Binary Input & Portal Messaging)

Processes raw binary audio or text. Handles commands (Call/SMS enriched via
Contact & Portal APIs) and general AI queries.

**Auth:** `Authentication: ` header required for `/assistant`, `/api/text`.

**Logic:** 1\. Hardcoded commands (Call/SMS try contact lookup). 2. AI
fallback for Nav/Call/SMS (tries contact lookup). 3. Message to "PORTAL" uses
dedicated API. 4. General AI. **Commands always return JSON.**

### POST /assistant

Body: Raw PCM audio (e.g., `Content-Type: audio/l16; rate=16000`)

Response: Command JSON (`Result:0, X-Response-Type:command`) or AI Text
(`Result:0, X-Response-Type:ai_text`) or AI Audio Stream (`Result:1,
X-Response-Type:ai_audio` with `X-Response-Text` header).

    
    
    // Example Command Response (Call Mom)
    {
      "feature": 7,
      "parameters": { "who": "Mom", "to": "+123...", "contact_name": "Mom (Mobile)" }
    }
    // Example Command Response (Message Portal Success - Handled by Server, User gets Confirmation via AI Text/Audio)
    // The direct response from /assistant would be the confirmation text/audio.
    // If you need ESP32 to know portal message was attempted, server would need to send command JSON like:
    // { "feature": 9, "parameters": { "recipient": "PORTAL", "status": "sent_to_portal", "api_response": { ...portal_api_json_response... } } }
    // Current logic: if portal send succeeds/fails, it returns (user_message, False) to trigger AI text/audio response.
    

### POST /api/text

Body: JSON `{"text": "user query"}`

Response: Command JSON or AI Text JSON `{"response": "...", "is_command":
false}`.

### GET /health

Service status.
    

HTTP 5002/TCP
07/19/2025 07:54 UTC

Bootstrap

Software

PalletsProjects Werkzeug 3.1.3

Details

http://20.68.131.221:5002/
Status
200  OK
Body Hash
sha1:641088feefe8fc49ddcff40ad8cff99ceee9d457
HTML Title
Mavis Tech Service Status
Response Body
      ![Mavis Tech Logo](https://mavistech.uk/wp-content/uploads/2024/02/logo.png)

Last checked: 2025-07-19 07:54:35

## APIs

__GPS API

<https://gps.mavistech.cloud>

__Online (200)

__OCR API

<https://ocr.mavistech.cloud>

__Offline (502)

__Photo Viewer - OCR

<http://20.68.131.221:8001>

__Online (200)

__Photo Viewer - Scene

<http://20.68.131.221:8002>

__Online (200)

__Scene API

<https://scene.mavistech.cloud>

__Offline (502)

__Voice Assistant API

<https://assistant.mavistech.cloud>

__Online (200)

## Device Management

__ESP32 Management

<http://20.117.120.208:8003>

__Online (200)

## Websites & Portals

__Admin Panel

<http://20.117.120.208:8000/admin/>

__Online (200)

__Customer Portal

<https://office.mavistech.uk>

__Online (200)

__OTA Update Portal

<http://20.117.120.208:5002>

__Online (200)

__PBX Portal

<https://pbx.mavistech.cloud/admin/config.php>

__Online (200)
    

HTTP 5005/TCP
07/19/2025 08:44 UTC


Software

PalletsProjects Werkzeug 3.1.3

Details

http://20.68.131.221:5005/
Status
200  OK
Body Hash
sha1:b71827c1109fec21e476b85fac18e42dc777814d
HTML Title
Face Recognition API Documentation (v2.2)
Response Body
      # Face Recognition API Documentation (v2.2)

For ESP32 and other client integrations.

**Base URL:** `http://:` (e.g., `http://20.68.131.221:5005`)

**Authentication Required:** All API endpoints (except `/`, `/docs`, and
`/ping`) now require an `Authentication` HTTP header. The value of this header
must be the valid device/user UID.

    
    
    Authentication: YOUR_DEVICE_UID

## 1\. Recognize Faces in an Image

This section describes how to send an image for face recognition. The primary
method for ESP32 is sending raw binary image data. An alternative multipart
method is also available.

* * *

### 1.1 Recognize via Raw Binary Image (Recommended for ESP32)

This endpoint takes raw binary image data directly in the request body and
attempts to identify known persons previously registered under the UID
provided in the `Authentication` header. The response format (text or audio)
depends on the user's preference.

#### Endpoint Details:

  * **Method:** `POST`
  * **URL:** `/recognize_binary`
  * **Authentication:** Required (UID in `Authentication` header).

#### Request Format:

The request body **is the raw binary image data** (e.g., JPEG, PNG bytes).

#### Required Headers:

Header Name | Example Value | Description  
---|---|---  
`Authentication` | `YOUR_DEVICE_UID` | The unique device/user UID.  
`Content-Type` | `image/jpeg` | **Crucial.** The MIME type of the image being
sent (e.g., `image/jpeg`, `image/png`).  
  
#### Example `curl` Request (Binary Body):

    
    
    curl -X POST \
      http://:5005/recognize_binary \
      -H "Authentication: YOUR_DEVICE_UID" \
      -H "Content-Type: image/jpeg" \
      --data-binary "@/path/to/scene_with_faces.jpg" \
      --output recognized_output --dump-header headers.txt
    # Note: --data-binary sends the file content as raw binary.
    # --output and --dump-header are for observing the response.
                

**ESP32 Client Notes (Binary Upload):**

  * This is generally simpler for ESP32.
  * Ensure the `Authentication` header is set.
  * **Must set the `Content-Type` header** correctly (e.g., "image/jpeg" if sending a JPEG from ESP32-CAM).
  * The HTTP request body should contain only the raw bytes of the image.

### Response Format (Based on User Preference - Applies to both
/recognize_binary and /recognize)

The server queries an external API to determine the user's preferred response
format (Text or Audio) based on the authenticated UID. The HTTP status code
(e.g., `200 OK` or `500 Internal Server Error`) remains a primary indicator of
overall request success or critical failure.

#### A. Text Preference (or Audio Fallback)

  * **HTTP Status Code:** `200 OK` (for successful processing, even if no faces are found/recognized) or `500 Internal Server Error` (if there was a server-side issue like loading registered faces).
  * **Headers:**
    * `Content-Type: text/plain`
    * `Result: 0`
    * `X-Response-Type: ai_text` (This type is used for all text responses, whether normal informational messages, successful recognitions, or error descriptions that are presented as text.)
    * `X-Response-Type: ai_text_fallback` (This type is used if audio was preferred but TTS was unavailable, so a text response is provided instead. The content will be similar to `ai_text`.)
  * **Body:** Plain text string describing the outcome. 

Examples:

    
        I see Alice Wonderland.
    
        I see one person, but I don't recognize them.
    
        (Audio unavailable) No faces are registered for your user ID YOUR_DEVICE_UID.
    
        Error loading registered faces for your user ID YOUR_DEVICE_UID. Please contact support.
    
        I couldn't detect any faces in the image you sent.

#### B. Audio Preference

  * **HTTP Status Code:** `200 OK` or `500 Internal Server Error` (as above).
  * **Headers:**
    * `Content-Type: audio/x-raw` (PCM, 16kHz, 16-bit Mono)
    * `Result: 1`
    * `X-Response-Type: ai_audio` (This type is used for all audio responses. The spoken content will indicate success, information, or an error.)
    * `Transfer-Encoding: chunked` (Audio is streamed)
    * `X-Response-Text: ` (Optional, for client reference/debugging. Newlines removed. This text reflects what is spoken, be it success or an error description.)
  * **Body:** Streamed raw PCM audio data. The client needs to be able to play this format. The spoken audio will convey the result (e.g., "I see Alice," or "Error: No faces were detected").

**Handling Responses on ESP32:**

  * First, check the HTTP Status Code for overall success/failure of the API call.
  * Then, check the `Result` header (`0` for Text, `1` for Audio) and `Content-Type` to determine how to process the body.
  * If audio (`Result: 1`, `Content-Type: audio/x-raw`), the client should read the body as a stream of raw audio bytes and send it to an appropriate audio output peripheral (e.g., I2S DAC).
  * The `X-Response-Text` header provides the text version of what was spoken, which can be useful for debugging or displaying if needed.
  * The content of the text or audio itself will describe the specific outcome of the recognition attempt (e.g., names recognized, no faces found, error messages).

### General Error Responses (for /recognize_binary and /recognize, non-
preference specific for critical client errors):

**400 Bad Request:**

  * (for `/recognize_binary`) Missing/invalid `Content-Type` header: 
    
        {"error": "Missing or invalid 'Content-Type' header..."}

  * (for `/recognize_binary`) No image data in body: 
    
        {"error": "No image data found in request body."}

  * (for `/recognize` multipart) Missing image file: 
    
        {"error": "No image file provided"}

**401 Unauthorized:** (Missing or malformed `Authentication` header)

    
    
    {"error": "Authentication header required (containing UID)"}

**403 Forbidden:** (UID in `Authentication` header is invalid/unverified)

    
    
    {"error": "Invalid or unverifiable UID"}

**500 Internal Server Error:** (e.g., major database issue before preference
check. For other 500s where preference *can* be checked, it tries to use
preferred format for the error message itself.)

    
    
    {"error": "An internal error occurred."}

* * *

### 1.2 Recognize via Multipart Form Data (Alternative)

This endpoint also recognizes faces but expects the image as part of a
`multipart/form-data` request. This might be used by clients other than ESP32
or if the ESP32 library handles multipart better for some reason.

#### Endpoint Details:

  * **Method:** `POST`
  * **URL:** `/recognize`
  * **Authentication:** Required (UID in `Authentication` header).

#### Request Format (Multipart):

The request must be a `multipart/form-data` POST request.

##### Required Headers:

  * `Authentication: YOUR_DEVICE_UID`

##### Form Fields:

Field Name | Type | Description | Required  
---|---|---|---  
`image` | File (image/jpeg, image/png) | The image file captured by the
device, containing faces to be recognized. | Yes  
  
#### Example `curl` Request (Multipart):

    
    
    curl -X POST \
      http://:5005/recognize \
      -H "Authentication: YOUR_DEVICE_UID" \
      -F "image=@/path/to/scene_with_faces.jpg" \
      --output recognized_output --dump-header headers.txt
                

**Response Format:** Same as for `/recognize_binary` (see section 1.1 Response
Format above).

## 2\. Register a New Face

This endpoint allows you to register one or more images for a specific person.
The UID for registration is taken from the `Authentication` header.

### Endpoint Details:

  * **Method:** `POST`
  * **URL:** `/register`
  * **Authentication:** Required (UID in `Authentication` header).

### Request Format:

The request must be a `multipart/form-data` POST request.

#### Required Headers:

  * `Authentication: YOUR_DEVICE_UID`

#### Form Fields:

Field Name | Type | Description | Required  
---|---|---|---  
`name` | String | The name of the person whose face is being registered. This
name will be used in recognition responses. | Yes  
`image` | File (image/jpeg, image/png) | The image file containing a clear,
single face to be registered. | Yes  
  
#### Example `curl` Request:

    
    
    curl -X POST \
      http://:5005/register \
      -H "Authentication: YOUR_DEVICE_UID" \
      -F "name=Alice Wonderland" \
      -F "image=@/path/to/alice_center.jpg"
                

**ESP32 Client Notes (Register):**

  * Ensure the `Authentication` header is set with the device UID.
  * Construct a `multipart/form-data` request. Libraries like `HTTPClient` on ESP32 can help manage this.
  * Send one image per request for optimal registration.

### Registration Image Guidance:

For robust recognition, especially with variable camera quality like
ESP32-CAM, we **strongly recommend registering multiple photos per person**.
Call the `/register` endpoint multiple times (once for each photo) with the
same `Authentication` header UID and the same `name`, but a different image
file.

Suggested poses/conditions for registration images (clear, well-lit, single
face):

  * **Center (Neutral):** Looking directly at the camera, neutral expression.
  * **Center (Smiling):** Looking directly at the camera, smiling.
  * **Look Left (Slightly):** Head turned slightly to their left.
  * **Look Right (Slightly):** Head turned slightly to their right.
  * _(Optional)_ Images from the ESP32-CAM itself under typical operating conditions.

Aim for **3-5 diverse images per person**. The API registers the first face
detected in the submitted image.

### Success Response (201 Created):

    
    
    {
        "message": "Successfully registered face for Alice Wonderland under authenticated UID YOUR_DEVICE_UID"
    }
                    

### Error Responses (Register):

**400 Bad Request:** (e.g., missing fields, no face in image, name empty)

    
    
    {"error": "No face found in the provided image"}

**401 Unauthorized:** (Missing or malformed `Authentication` header)

    
    
    {"error": "Authentication header required (containing UID)"}

**403 Forbidden:** (UID in `Authentication` header is invalid/unverified)

    
    
    {"error": "Invalid or unverifiable UID"}

**500 Internal Server Error:** (e.g., database issue)

    
    
    {"error": "Database error during registration."}

## 3\. Manage Registered Faces

These endpoints allow listing and deleting registered face entries for the
authenticated UID.

* * *

### 3.1 List Registered Faces

Retrieves a list of all face entries (individual image registrations)
associated with the authenticated UID.

#### Endpoint Details:

  * **Method:** `GET`
  * **URL:** `/faces/list`
  * **Authentication:** Required (UID in `Authentication` header).

#### Example `curl` Request:

    
    
    curl -X GET \
      http://:5005/faces/list \
      -H "Authentication: YOUR_DEVICE_UID"
                

#### Success Response (200 OK):

If faces are registered:

    
    
    {
        "message": "Successfully retrieved registered faces.",
        "registered_face_entries": [
            {"id": 1, "name": "Alice"},
            {"id": 2, "name": "Bob"},
            {"id": 5, "name": "Alice"} 
        ]
    }
                    

If no faces are registered:

    
    
    {
        "message": "No faces are currently registered for this UID.",
        "registered_persons": [] 
    }
                    

The `id` in each entry is the unique database identifier for that specific
image registration. It is used for deletion.

### Error Responses (List Faces):

**401 Unauthorized / 403 Forbidden:** Standard authentication errors.

**500 Internal Server Error:** (e.g., database issue)

    
    
    {"error": "A database error occurred while retrieving face list."}

* * *

### 3.2 Delete a Specific Face Entry

Deletes a single registered face entry using its unique `id`. The entry must
belong to the authenticated UID.

#### Endpoint Details:

  * **Method:** `DELETE`
  * **URL:** `/faces/delete/` (Replace `` with the actual ID from the list, e.g., `/faces/delete/5`)
  * **Authentication:** Required (UID in `Authentication` header).

#### URL Parameters:

Parameter | Type | Description  
---|---|---  
`` | Integer | The unique ID of the face entry to delete (obtained from the
`/faces/list` endpoint).  
  
#### Example `curl` Request:

    
    
    curl -X DELETE \
      http://:5005/faces/delete/5 \
      -H "Authentication: YOUR_DEVICE_UID"
                

#### Success Response (200 OK):

    
    
    {
        "message": "Successfully deleted face entry for 'Alice' (ID: 5)."
    }
                    

### Error Responses (Delete Face):

**401 Unauthorized / 403 Forbidden:** Standard authentication errors.

**404 Not Found:** If the `face_id` does not exist, or if it exists but does
not belong to the authenticated UID.

    
    
    {"error": "Face entry not found or not authorized for deletion."}

**500 Internal Server Error:** (e.g., database issue)

    
    
    {"error": "A database error occurred during face deletion."}

## 4\. Ping (Health Check)

A simple endpoint to check if the server is alive and responding. Does not
require authentication.

### Endpoint Details:

  * **Method:** `GET`
  * **URL:** `/ping`
  * **Authentication:** Not Required.

### Success Response (200 OK):

    
    
    {
        "message": "Pong! Face Recognition Server is alive."
    }
                

**ESP32-CAM Image Quality:** The reliability of face recognition heavily
depends on the image quality provided by the ESP32-CAM. Poor lighting, motion
blur, low resolution, and incorrect focus will significantly reduce accuracy.
Optimize image capture on the ESP32 side as much as possible.
    

HTTP 8001/TCP
07/18/2025 16:20 UTC


Software

PalletsProjects Werkzeug 3.1.3

Details

http://20.68.131.221:8001/
Status
200  OK
Body Hash
sha1:779b6221f9da60c9f6a30ecf963b81787ea4142e
HTML Title
Real-time Photo Feed
Response Body
      # OCR Photo Feed

Connecting...

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250717_125756.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_125756.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_125756.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250717_125756.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_125756.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250717_082928.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_082928.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_082928.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250717_082928.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_082928.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250717_072501.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_072501.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_072501.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250717_072501.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250717_072501.jpg)

[
![text_read_transformed_22.ED.FB.7C.EC.0E_20250716_120235.jpg](/photos/text_read_transformed_22.ED.FB.7C.EC.0E_20250716_120235.jpg)
](/photos/text_read_transformed_22.ED.FB.7C.EC.0E_20250716_120235.jpg)

text_read_transformed_22.ED.FB.7C.EC.0E_20250716_120235.jpg

[ Download
](/photos/text_read_transformed_22.ED.FB.7C.EC.0E_20250716_120235.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_213457.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_213457.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_213457.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_213457.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_213457.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202318.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202318.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202318.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202318.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202318.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202307.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202307.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202307.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202307.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202307.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202256.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202256.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202256.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202256.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202256.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202244.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202244.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202244.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202244.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_202244.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195618.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195618.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195618.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195618.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195618.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195542.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195542.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195542.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195542.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250715_195542.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190108.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190108.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190108.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190108.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190108.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190016.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190016.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190016.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190016.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_190016.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250714_185659.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_185659.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_185659.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250714_185659.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_185659.jpg)

[
![text_read_transformed_82.A5.5E.FF.AC.A1_20250714_184518.jpg](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_184518.jpg)
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_184518.jpg)

text_read_transformed_82.A5.5E.FF.AC.A1_20250714_184518.jpg

[ Download
](/photos/text_read_transformed_82.A5.5E.FF.AC.A1_20250714_184518.jpg)

[
![text_read_transformed_42.87.04.15.D8.05_20250630_100244.jpg](/photos/text_read_transformed_42.87.04.15.D8.05_20250630_100244.jpg)
](/photos/text_read_transformed_42.87.04.15.D8.05_20250630_100244.jpg)

text_read_transformed_42.87.04.15.D8.05_20250630_100244.jpg

[ Download
](/photos/text_read_transformed_42.87.04.15.D8.05_20250630_100244.jpg)

[
![text_read_transformed_4A.44.78.63.49.44_20250614_081439.jpg](/photos/text_read_transformed_4A.44.78.63.49.44_20250614_081439.jpg)
](/photos/text_read_transformed_4A.44.78.63.49.44_20250614_081439.jpg)

text_read_transformed_4A.44.78.63.49.44_20250614_081439.jpg

[ Download
](/photos/text_read_transformed_4A.44.78.63.49.44_20250614_081439.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250613_143546.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_143546.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_143546.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250613_143546.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_143546.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250613_142604.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_142604.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_142604.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250613_142604.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_142604.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124651.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124651.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124651.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124651.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124651.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124605.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124605.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124605.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124605.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250613_124605.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250612_091615.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250612_091615.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250612_091615.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250612_091615.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250612_091615.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250611_194520.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250611_194520.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250611_194520.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250611_194520.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250611_194520.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143410.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143410.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143410.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143410.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143410.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143313.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143313.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143313.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143313.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143313.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143206.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143206.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143206.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143206.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_143206.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142930.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142930.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142930.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142930.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142930.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142910.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142910.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142910.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142910.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142910.jpg)

[
![text_read_transformed_93.08.40.DC.EB.AF_20250610_142801.jpg](/photos/text_read_transformed_93.08.40.DC.EB.AF_20250610_142801.jpg)
](/photos/text_read_transformed_93.08.40.DC.EB.AF_20250610_142801.jpg)

text_read_transformed_93.08.40.DC.EB.AF_20250610_142801.jpg

[ Download
](/photos/text_read_transformed_93.08.40.DC.EB.AF_20250610_142801.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142755.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142755.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142755.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142755.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142755.jpg)

[
![text_read_transformed_93.08.40.DC.EB.AF_20250610_142745.jpg](/photos/text_read_transformed_93.08.40.DC.EB.AF_20250610_142745.jpg)
](/photos/text_read_transformed_93.08.40.DC.EB.AF_20250610_142745.jpg)

text_read_transformed_93.08.40.DC.EB.AF_20250610_142745.jpg

[ Download
](/photos/text_read_transformed_93.08.40.DC.EB.AF_20250610_142745.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142622.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142622.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142622.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142622.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142622.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142543.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142543.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142543.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142543.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142543.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142500.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142500.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142500.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142500.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_142500.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140841.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140841.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140841.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140841.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140841.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140440.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140440.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140440.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140440.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_140440.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_135914.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_135914.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_135914.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_135914.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_135914.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114721.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114721.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114721.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114721.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114721.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114644.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114644.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114644.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114644.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_114644.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113712.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113712.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113712.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113712.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113712.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113119.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113119.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113119.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113119.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_113119.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112341.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112341.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112341.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112341.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112341.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112320.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112320.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112320.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112320.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112320.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112151.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112151.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112151.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112151.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_112151.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111449.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111449.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111449.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111449.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111449.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111048.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111048.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111048.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111048.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_111048.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_110827.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_110827.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_110827.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_110827.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_110827.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105158.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105158.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105158.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105158.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105158.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105125.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105125.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105125.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105125.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_105125.jpg)

[
![text_read_transformed_EB.48.4A.FB.AF.4D_20250610_104921.jpg](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_104921.jpg)
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_104921.jpg)

text_read_transformed_EB.48.4A.FB.AF.4D_20250610_104921.jpg

[ Download
](/photos/text_read_transformed_EB.48.4A.FB.AF.4D_20250610_104921.jpg)

[
![text_read_transformed_4A.44.78.63.49.44_20250608_220724.jpg](/photos/text_read_transformed_4A.44.78.63.49.44_20250608_220724.jpg)
](/photos/text_read_transformed_4A.44.78.63.49.44_20250608_220724.jpg)

text_read_transformed_4A.44.78.63.49.44_20250608_220724.jpg

[ Download
](/photos/text_read_transformed_4A.44.78.63.49.44_20250608_220724.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250608_215911.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250608_215911.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250608_215911.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250608_215911.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250608_215911.jpg)

[
![text_read_transformed_4A.44.78.63.49.44_20250608_215357.jpg](/photos/text_read_transformed_4A.44.78.63.49.44_20250608_215357.jpg)
](/photos/text_read_transformed_4A.44.78.63.49.44_20250608_215357.jpg)

text_read_transformed_4A.44.78.63.49.44_20250608_215357.jpg

[ Download
](/photos/text_read_transformed_4A.44.78.63.49.44_20250608_215357.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250607_085302.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250607_085302.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250607_085302.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250607_085302.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250607_085302.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224901.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224901.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224901.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224901.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224901.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224605.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224605.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224605.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224605.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_224605.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223716.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223716.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223716.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223716.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223716.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223636.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223636.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223636.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223636.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_223636.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_205142.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_205142.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_205142.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_205142.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_205142.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200450.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200450.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200450.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200450.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200450.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200418.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200418.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200418.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200418.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_200418.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_194121.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_194121.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_194121.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_194121.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_194121.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_191505.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_191505.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_191505.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_191505.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_191505.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185635.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185635.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185635.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185635.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185635.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185024.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185024.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185024.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185024.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_185024.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184949.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184949.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184949.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184949.jpg

[ Download
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184949.jpg)

[
![text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184853.jpg](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184853.jpg)
](/photos/text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184853.jpg)

text_read_transformed_63.C1.A4.CD.3F.F4_20250606_184853.jpg</di
    

HTTP 8002/TCP
07/19/2025 10:52 UTC


Software

PalletsProjects Werkzeug 3.1.3

Details

http://20.68.131.221:8002/
Status
200  OK
Body Hash
sha1:17e4291790001da746f0175e502c3a6478c194fa
HTML Title
Real-time Photo Feed
Response Body
      # Scene Desc Photo Feed

Connection Status : Good

[
![OV5640_image_20250717_130146_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_130146_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_130146_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_130146_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_130146_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_125709_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_125709_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_125709_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_125709_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_125709_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_111740_bat-1_uid23_F1_42_FF_C2_77.jpg](/photos/OV5640_image_20250717_111740_bat-1_uid23_F1_42_FF_C2_77.jpg)
](/photos/OV5640_image_20250717_111740_bat-1_uid23_F1_42_FF_C2_77.jpg)

OV5640_image_20250717_111740_bat-1_uid23_F1_42_FF_C2_77.jpg

[ Download
](/photos/OV5640_image_20250717_111740_bat-1_uid23_F1_42_FF_C2_77.jpg)

[
![OV5640_image_20250717_085132_bat-1_uid23_F1_42_FF_C2_77.jpg](/photos/OV5640_image_20250717_085132_bat-1_uid23_F1_42_FF_C2_77.jpg)
](/photos/OV5640_image_20250717_085132_bat-1_uid23_F1_42_FF_C2_77.jpg)

OV5640_image_20250717_085132_bat-1_uid23_F1_42_FF_C2_77.jpg

[ Download
](/photos/OV5640_image_20250717_085132_bat-1_uid23_F1_42_FF_C2_77.jpg)

[
![OV5640_image_20250717_082938_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_082938_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_082938_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_082938_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_082938_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_082252_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_082252_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_082252_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_082252_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_082252_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_071800_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_071800_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_071800_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_071800_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_071800_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_071731_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_071731_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_071731_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_071731_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_071731_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_071614_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_071614_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_071614_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_071614_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_071614_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_071540_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250717_071540_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250717_071540_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250717_071540_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250717_071540_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250717_071521_bat-1_uid23_F1_42_FF_C2_77.jpg](/photos/OV5640_image_20250717_071521_bat-1_uid23_F1_42_FF_C2_77.jpg)
](/photos/OV5640_image_20250717_071521_bat-1_uid23_F1_42_FF_C2_77.jpg)

OV5640_image_20250717_071521_bat-1_uid23_F1_42_FF_C2_77.jpg

[ Download
](/photos/OV5640_image_20250717_071521_bat-1_uid23_F1_42_FF_C2_77.jpg)

[
![OV5640_image_20250715_230843_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250715_230843_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250715_230843_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250715_230843_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250715_230843_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250715_221729_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250715_221729_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250715_221729_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250715_221729_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250715_221729_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250715_221705_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250715_221705_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250715_221705_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250715_221705_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250715_221705_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250715_195630_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250715_195630_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250715_195630_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250715_195630_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250715_195630_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250715_195518_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250715_195518_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250715_195518_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250715_195518_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250715_195518_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250714_190148_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250714_190148_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250714_190148_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250714_190148_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250714_190148_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250714_190121_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250714_190121_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250714_190121_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250714_190121_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250714_190121_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250714_185633_bat-1_uid82_A5_5E_FF_AC_A1.jpg](/photos/OV5640_image_20250714_185633_bat-1_uid82_A5_5E_FF_AC_A1.jpg)
](/photos/OV5640_image_20250714_185633_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

OV5640_image_20250714_185633_bat-1_uid82_A5_5E_FF_AC_A1.jpg

[ Download
](/photos/OV5640_image_20250714_185633_bat-1_uid82_A5_5E_FF_AC_A1.jpg)

[
![OV5640_image_20250714_130559_bat-1_uid63_C1_A4_CD_3F_F4.jpg](/photos/OV5640_image_20250714_130559_bat-1_uid63_C1_A4_CD_3F_F4.jpg)
](/photos/OV5640_image_20250714_130559_bat-1_uid63_C1_A4_CD_3F_F4.jpg)

OV5640_image_20250714_130559_bat-1_uid63_C1_A4_CD_3F_F4.jpg

[ Download
](/photos/OV5640_image_20250714_130559_bat-1_uid63_C1_A4_CD_3F_F4.jpg)

[
![OV5640_image_20250714_101454_bat-1_uidD0_DD_94_FA_A9_47.jpg](/photos/OV5640_image_20250714_101454_bat-1_uidD0_DD_94_FA_A9_47.jpg)
](/photos/OV5640_image_20250714_101454_bat-1_uidD0_DD_94_FA_A9_47.jpg)

OV5640_image_20250714_101454_bat-1_uidD0_DD_94_FA_A9_47.jpg

[ Download
](/photos/OV5640_image_20250714_101454_bat-1_uidD0_DD_94_FA_A9_47.jpg)

[
![OV5640_image_20250714_101413_bat-1_uidD0_DD_94_FA_A9_47.jpg](/photos/OV5640_image_20250714_101413_bat-1_uidD0_DD_94_FA_A9_47.jpg)
](/photos/OV5640_image_20250714_101413_bat-1_uidD0_DD_94_FA_A9_47.jpg)

OV5640_image_20250714_101413_bat-1_uidD0_DD_94_FA_A9_47.jpg

[ Download
](/photos/OV5640_image_20250714_101413_bat-1_uidD0_DD_94_FA_A9_47.jpg)

[
![OV5640_image_20250713_085634_bat-1_uid4D_5D_49_06_33_EF.jpg](/photos/OV5640_image_20250713_085634_bat-1_uid4D_5D_49_06_33_EF.jpg)
](/photos/OV5640_image_20250713_085634_bat-1_uid4D_5D_49_06_33_EF.jpg)

OV5640_image_20250713_085634_bat-1_uid4D_5D_49_06_33_EF.jpg

[ Download
](/photos/OV5640_image_20250713_085634_bat-1_uid4D_5D_49_06_33_EF.jpg)

[
![OV5640_image_20250713_085604_bat-1_uid4D_5D_49_06_33_EF.jpg](/photos/OV5640_image_20250713_085604_bat-1_uid4D_5D_49_06_33_EF.jpg)
](/photos/OV5640_image_20250713_085604_bat-1_uid4D_5D_49_06_33_EF.jpg)

OV5640_image_20250713_085604_bat-1_uid4D_5D_49_06_33_EF.jpg

[ Download
](/photos/OV5640_image_20250713_085604_bat-1_uid4D_5D_49_06_33_EF.jpg)

× ![Enlarged photo]()
    

Geographic Location

City
London
Province
England
Country
United Kingdom (GB)
Coordinates
51.50853, -0.12574
Timezone
Europe/London