Eu postei em [1] o material relativo ao protocolo de comunicação entre aplicativos DICOM. Este arquivo contém:
- As partes da documentação oficial DICOM relativos a este protocolo.
- Uma documentação auxiliar em português.
- Implementação das mensagens A-Associate-RQ e C-ECHO-RQ, junto com exemplos mostrando o uso destas mensagens através de sockets e o framework Twisted Matrix.
- Instruções de como eu cheguei a esta implementação e dicas de documentação. Mostram como eu usei algumas ferramentas auxiliares que muito me ajudaram.
1- http://www.softwarepublico.gov.br/dotlrn/clubs/invesalius/file-storage/view/projects/ufla/Material_Com_Dicom.7z
Autor: Thiago Franco Moraes
44 comentários
Implementar as partes do protocolo DICOM necessárias, via socket;
Implementar as partes do protocolo DICOM de alguma outra forma. No caso de utilizar a opção 1, alguns critérios teriam que ser observados (além do que escrevemos no documento geral de especificação [I]): licença compatível com GNU GPL (poderia ser BSD), para que possa ser disponibilizado junto do InVesalius
em Python ou de modo que haja binding para Python (versão 2.5, pelo menos). É terminantemente proibido utilizar Java (uma virtual machine só daria delay no processo) ou PHP (para o que queremos, esta linguagem não oferece mais recursos que Python). Vocês poderiam utilizar C ou C++, contanto que disponibilizassem os bindings para Python. Rodar, pelo menos, em Windows e GNU Linux. Thiago havia a princípio testado muitas bibliotecas (dentre as quais a que você citou), mas nenhuma foi bem sucedida - fosse na hora de compilar, na hora de importar, ou de usar. Note que ele trabalhou com isso por uma semana apenas. Ou seja, devem haver outras possibilidades. Entretanto, Thiago é bastante competente, tendo em vista o curto tempo do projeto de vocês, sugiro que vocês partam da experiência dele. Após não ter sido bem sucedido com a alternativa 1, Thiago passou para a segunda alternativa. Como resultado deste trabalho com sockets vocês têm os códigos na pasta exemplo [II]. Deu um certo trabalho, mas funcionou de modo bastante efetiva a comunicação via socket. O Twisted é um framework que busca abstrair e facilitar a comunicação via rede. A idéia é que seja mais fácil utilizar ele do que implementar as coisas "na raça", utilizando sockets. Entretanto, para utilizá-lo adequadamente, é necessário estudá-lo um pouco. Thiago o estudou muito brevemente e fez um exemplo com ele (dicomTwisted.py), também está disponível em [II]. O Twisted seria uma possibilidade para a alternativa 3. Note que não é necessário implementar "todo protocolo DICOM", no caso de vocês seguirem as alternativas 2 ou 3. As seguintes instruções são necessárias: A-Associate-RQ
C-Echo-RQ
C-STORE
C-GET
C-FIND A-Release-RQ Thiago já implementou 1/3 delas (as duas primeiras), via socket. Pelo que ele sugeriu, seria mais fácil vocês começarem implementando as instruções A-Release-RQ e o C-Find-RQ. Além disso, é necessário implementar a parte de tratamento de mensagens. Provavelmente vocês teriam que desenvolver um parser das mensagens RSP (response) do servidor. Para isso é necessário estudar algumas partes do protocolo DICOM, a fim de entender os campos das mensagens de resposta. Ainda, caso vocês optem por implementar as instruções, Thiago tem algumas considerações sobre algumas melhorias e adaptações que deveriam ser feitas no código dele. O objetivo da nossa equipe com este projeto, Saulo, é o produto final. O meio fica a critério de vocês - seja alternativa 1, 2 ou 3 a escolhida. Nos mantenham informados sobre os avanços, para que possamos auxiliá-los. Nossa equipe do CTI apóia o projeto de vocês. Atenciosamente, Tatiana [I] www.softwarepublico.gov.br/dotlrn/clubs/invesalius/file-storage/view/projects/ufla/especificao-cti-projeto-uflv.pdf [II] www.softwarepublico.gov.br/dotlrn/clubs/invesalius/file-storage/view/projects/ufla/Material_Com_Dicom.7z