Как разобрать и сохранить ответ Multipart / related type = image / jpeg?(Dicom Wado Response) - PullRequest
1 голос
/ 27 сентября 2019

Я делаю запрос Get на сервер Dicom, который возвращает Multipart / Related Type = image / jpeg.Я попытался использовать функцию многочастного библиотек aiohttp, чтобы разобрать, но это не сработало.Сохраненный файл поврежден.

Вот мой код.

    import asyncio
    import aiohttp
    '''
    async def fetch(url,session,header):
        async with session.get(url,headers=header) as response:
             await response

    async def multiHit(urls,header):
        tasks = []
        async with aiohttp.ClientSession() as session:
            for i,url in enumerate(urls):
                tasks.append(fetch(url,session,header))
            result = await asyncio.gather(*tasks)
            return result

    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(multiHit(["http://10.177.216.224/ea/AE_ARCH1/studies/1.2.528.1.1001.100.2.4237.5261.110511058.20131122121300514/series/1.2.528.1.1001.100.3.4237.5261.110511058.20131122121300530/instances/1.2.528.1.1001.100.4.4237.5261.110511058.20131122121300546/frames/1"],{"Accept":"multipart/related;type=image/jpeg"}))
    print(res)
    '''

    async def xyz(loop):
        async with aiohttp.ClientSession(loop=loop).get(url="http://10.177.216.224/ea/AE_ARCH1/studies/1.2.528.1.1001.100.2.4237.5261.110511058.20131122121300514/series/1.2.528.1.1001.100.3.4237.5261.110511058.20131122121300530/instances/1.2.528.1.1001.100.4.4237.5261.110511058.20131122121300546/frames/1",headers={"Accept":"multipart/related;type=image/jpeg"}) as response:
             reader = aiohttp.MultipartReader.from_response(response)
             while True:
                 part = await reader.next()
                 if part is None:
                     break
                 filedata = await part.read(decode=False)
                 import base64
                 with open('m.jpeg','wb') as outFile:
                     outFile.write(part.decode(filedata))
        return 1

    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(xyz(loop))

Как проанализировать ответ Multipart / related и сохранить изображения?

1 Ответ

0 голосов
/ 28 сентября 2019

Я понял, что правильно разбираю ответ из нескольких частей, но мне пришлось использовать другую библиотеку (имя библиотеки: imagecodecs, имя метода: jpegsof3_decode) для распаковки отдельной части в изображения.Это дает массив изображений.Вот обновленный код

reader = aiohttp.MultipartReader.from_response(response)
while True:
     part = await reader.next()
     if part is None:
              break
     data = await part.read()
     imageDecompressed = jpegsof3_decode(data)

Далее массив numpy можно преобразовать в изображение с помощью cv2 libray

success, encoded_image = cv2.imencode('.png',imageDecompressed)

Байт-версию преобразованного изображения можно получить таким образом

imageInBytes = encoded_image.tobytes()
...