Есть ли способ переименовать изображения на локальном сервере restAPI, используя python? - PullRequest
1 голос
/ 05 марта 2020

Я создал API-интерфейс localhost для анализа изображений и сравнил их (компьютерное зрение) с проектом!

Я планирую загрузить изображения из папки с данными на сервер, каждый файл изображения в папка с именем (fake_name.jpg / jpeg) я пытаюсь добавить имя файла в качестве имени человека в параметрах, но могу сделать это только вручную и для каждого файла. я также пытаюсь выяснить, как загрузить несколько файлов.


    def image_to_base64(self, img):
        # convert image to base64
        prependInfo = 'data:image/jpeg;base64,'
        encodedString = base64.b64encode(img).decode("utf-8")
        fullString = str(prependInfo) + encodedString
        return str(fullString)

    # the following part is to create entry in database:

    def create_person_entry(self,img):
        base_url = "localhost:8080/service/api/person/create?"

        parameters = {
            "person-name": 'homer simson' #manual change name from here before each upload
        }
        data = {
            "image-data": self.image_to_base64(img)
        }
        r = requests.post(base_url+urllib.parse.urlencode(parameters),headers{'Authorization':self.auth_tok}, data=data).json()
        return r



#to import 1 image i used:
#with open("///data/homer simson.jpg", "rb") as img:
    person_name = cvis.create_person(img.read())
    print (person_name)

загрузка выполняется успешно, но мне нужно вручную назвать запись о человеке из параметров "имя-человека" для каждого человека, которого я загружаю! везде исследовал, чтобы автоматизировать решение!

edit1:

мне удалось заставить этот код работать, и он работал

# to upload multiple images 
#folder with JPEG/JPG files to upload 
folder = "/home///data/" 
#dict for files 
upload_list = [] 
for files in os.listdir(folder): with open("{folder}{name}".format(folder=folder, name=files), "rb") as data:
upload_list.append(files) 
person_name = cvis.create_person(data.read()) 
print (person_name) 

мне удалось загрузить все изображения из каталога на сервер сработало, но теперь все мои файлы названы Гомером Симпсоном :)

Мне наконец удалось понять это правильно по предложению AKX, его решение ниже plz upvote, спасибо

Теперь мне нужно вычислить как удалить предыдущие записи без имен .. проверим документацию API.

1 Ответ

2 голосов
/ 05 марта 2020

Я что-то упускаю - почему бы просто не добавить еще один аргумент в вашу create_person_entry() функцию?


    def create_person_entry(self, name, img):
        parameters = {
            "person-name": name,
        }
        # ...
        return r

# ...

cvis.create_person_entry("homer_simpson", img.read())

И если у вас есть папка с изображениями,

import os
import glob

for filename in glob.glob("people/*.jpg"):
    file_basename = os.path.splitext(os.path.basename(filename))[0]
    with open(filename, "rb") as img:
        cvis.create_person_entry(file_basename, img.read())

будет использовать расширение имени файла без расширения, например people/homer_simpson.jpg равно homer_simpson.

...