Rady (Ravindran Padmanabhan)
CTO of Innowave Healthcare
Mob : +919790974930
e-mail : ra...@innowave.in
Skype : radyworks
Hi Rady:
Your plan sounded good. For implementing the basic Dicom Web support (QIDO-RS, WADO-RS and STOR-RS), do you have an estimate for how soon it will be implemented?
Best,
Hello Abbottt,Just read about the recent release of DICOM 2015 standards, in that I understand the WADO Restful final text is made available the other two services are still in WIP. So we are on safe wicket.Since this is a social contribution, I have limited time to my involvement. This month the weekends are completely tieup with out door activities like Hill Run and Trekking.On commercial aspect I had checked with the team (that is the reason for the delay), the indication I have received from the team, it is min around two man month of efforts and charge 20 USD per man hour. This is their initial estimate. Based on the final scope and requirements this could change.We need more clarity as well on your requirement, you please let me know if there is a possibility of a skype call with you.With regards.Rady
Hi Sébastien:
That sounded great!
Adding just even basic support to QIDO-RS, WADO-RS and STOR-RS would attract substantial interests to Orthanc. One of the biggest attractions of dcm4chee was its claim of support of IHE. DicomWeb fits very well with what Orthanc is intended to do -- it'd be very beneficial for Orthanc to claim it is in Dicom Web compliant.
Once you have a basic implementation, I will for sure use it -- I know quite a few will use it, too. I'd also suggest you to take a closer look at the upcoming SIIM conference in Washington DC in April, as I sent the links previously. I think with the SIIM attendenc, Orthanc would get popular in the U.S.
Look forward to the first release!
Hi Sébastien:
About funding for trips promoting Orthanc: What about crowd sourcing? What can Orthanc offer to attract, say, $3,000usd, from the crowd?
(I for sure will "invest".)
I see. Well, "Build, they will come." Keep building.
Dear Celerity,
I haven't been around much lately, due to other projects. Hope you are in good progress with the DICOMWeb implementation. Any specific release date?
Also, would the new Orthanc web viewer have an option to choose to use the DICOMWeb protocola?
The implementation work has started. I will first focus on the most common features of DICOMWeb, then extend it in subsequent releases to cover more of the full spec.An initial public release is scheduled around April.
Sounds great, Sebastien. Will give it try shortly.
Hi Chris, Sebastian,
Great idea to track DicomWeb. Not clear what the state of art is.
I heard dcm4chee now has support to DicomWeb protocols, though I haven't got any time to look -- too much traveling and other stuff in the last few weeks. Hope get back to this soon.
Cheers.
My ultimate goal is to not use WADO-URI and I can do this once you implement WADO-RS RetrieveFrames. Any idea on when that might be done?
{ "HttpError" : "Bad Request", "HttpStatus" : 400, "Message" : "Bad file format", "Method" : "POST", "OrthancError" : "Bad file format", "OrthancStatus" : 15, "Uri" : "/dicom-web/studies"}private apiUrl = environment.pacs_servers[0].apiUrl;BOUNDARY = 'MESSAGEBOUNDARY';
storeStudies(image): Promise<any> { // the passed parameter is in bufferArray
return new Promise((resolve, reject) => { // construct Multipart let body = this.constructMultipart(image, 'application/dicom'); var convertedBody = this.convertUint8ArrayToBinaryString(body)
const headers = { 'Accept': 'application/json', 'Content-Type': 'multipart/related; type=application/dicom; boundary=' + this.BOUNDARY };
// post to the api this.http.post(this.apiUrl + 'studies', convertedBody, { headers: headers, responseType: 'json' }).subscribe((res) => { console.log('saved', res); let count = res['00081199'].Value.length; console.log('Upload was a success! ' + count + ' instance was uploaded.'); resolve(res) }), (err: HttpErrorResponse) => { console.log('error with http post', err) reject(err) }; });}
convertUint8ArrayToBinaryString(u8Array) { var i, len = u8Array.length, b_str = ""; for (i=0; i<len; i++) { b_str += String.fromCharCode(u8Array[i]); } return b_str;}
stringToArrayBuffer(str) { let bufView = new Uint8Array(str.length); for (let i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = str.charCodeAt(i); } return bufView;}
constructMultipart(body, contentType) { let headerStr = '--' + this.BOUNDARY + '\r\nContent-Type: ' + contentType + '\r\n\r\n'; let trailerStr = '\r\n--' + this.BOUNDARY + '--\r\n';
let header = this.stringToArrayBuffer(headerStr); let trailer = this.stringToArrayBuffer(trailerStr);
// Concatenate the header, the body and the trailer let b = new Uint8Array(header.byteLength + body.byteLength + trailer.byteLength); b.set(header); b.set(new Uint8Array(body), header.byteLength); b.set(trailer, header.byteLength + body.byteLength);
// console.log(b); // returns a Unit8Array return b;}
// convert unit8Array back to bufferconst convertedBody = body.buffer;