readme: ---
  tags:
  - clip
  - endpoints-template
  library_name: generic
  ---
  
  # Fork of [Geonmo/laion-aesthetic-predictor](https://huggingface.co/spaces/Geonmo/laion-aesthetic-predictor) for an Image Aesthetic Predictor).
  
  This repository implements a `custom` task for `Geonmo/laion-aesthetic-predictor` for 🤗 Inference Endpoints. The code for the customized handler is in the [handler.py](https://huggingface.co/philschmid/laion-asthetic-endpoint/tree/main/handler.py).
  
  ## Test Handler locally. 
  
  This model & handker can be tested locally using the [
  hf-endpoints-emulator](https://github.com/huggingface/hf-endpoints-emulator).
  
  
  1. Clone the repository and install the requirements. 
  
  ```bash
  git lfs install
  git clone https://huggingface.co/philschmid/laion-asthetic-endpoint
  
  cd laion-asthetic-endpoint
  pip install -r requirements.txt
  ```
  2. Install `hf-endpoints-emulator`
  
  ```bash
  pip install hf-endpoints-emulator
  ```
  
  3. Run the emulator
  
  ```bash
  hf-endpoints-emulator --handler handler.py
  ```
  
  4. Test the endpoint and send request
  
  ```bash
  curl --request POST \
    --url http://localhost \
    --header 'Content-Type: image/jpg' \
    --data-binary '@example1.jpg'
  ```
  
  
  ## Run Request 
  
  The endpoint expects the image to be served as `binary`. Below is an curl and python example
  
  #### cURL 
  
  1. get image 
  
  ```bash
  wget https://huggingface.co/philschmid/laion-asthetic-endpoint/resolve/main/example1.jpg -O test.jpg
  ```
  
  2. send cURL request
  
  ```bash
  curl --request POST \
    --url https://{ENDPOINT}/ \
    --header 'Content-Type: image/jpg' \
    --header 'Authorization: Bearer {HF_TOKEN}' \
    --data-binary '@test.jpg'
  ```
  
  3. the expected output
  
  ```json
  {"aesthetic score": 6.764713287353516}
  ```
  
  #### Python 
  
  
  1. get image 
  
  ```bash
  wget https://huggingface.co/philschmid/laion-asthetic-endpoint/resolve/main/example1.jpg -O test.jpg
  ```
  
  2. run request
  
  ```python
  import json
  from typing import List
  import requests as r
  import base64
  
  ENDPOINT_URL=""
  HF_TOKEN=""
  
  def predict(path_to_image:str=None):
      with open(path_to_image, "rb") as i:
        b = i.read()
      headers= {
          "Authorization": f"Bearer {HF_TOKEN}",
          "Content-Type": "image/jpeg" # content type of image
      }
      response = r.post(ENDPOINT_URL, headers=headers, data=b)
      return response.json()
  
  prediction = predict(path_to_image="test.jpg")
  
  prediction
  ```
  
  expected output
  
  ```json
  {"aesthetic score": 6.764713287353516}
  ```
  
  