どのようにオブジェクトを下位関数に渡すか悩みました まず JPEG Tagの定義ファイル defTag.pyです
# defTag.py
jpegTag = {
'TAG': '0xFF',
'DHT': '0xFFC4',
'SOI': '0xFFD8',
'EOI': '0xFFD9',
'SOF': '0xFFC3',
'SOS': '0xFFDA'
}
if __name__ == '__main__':
print(jpegTag)
print(jpegTag['TAG'], jpegTag['DHT'])
つぎに、これを読み込んで JPEG Tagの DHT, SOI, EOIアドレスを探すルーチンです searchJPEGTAGS.pyです
import sys
from bitstring import ConstBitStream
from defTag import jpegTag
def searchDHTs(file_obj):
DHTs = list(file_obj.findall(jpegTag['DHT'], bytealigned=True))
return DHTs
def searchSOIs(file_obj):
SOIs = list(file_obj.findall(jpegTag['SOI'], bytealigned=True))
return SOIs
def searchEOIs(file_obj):
EOIs = list(file_obj.findall(jpegTag['EOI'], bytealigned=True))
return EOIs
if __name__ == '__main__':
xa = ConstBitStream(filename=sys.argv[1])
print(searchDHTs(xa))
print(searchSOIs(xa))
print(searchEOIs(xa))
そして、ここに file objectを渡す上位ルーチンです ファイル名は test_searchJPEGTAGS.py です
from searchJPEGTAGS import searchDHTs, searchSOIs, searchEOIs
import sys
from bitstring import ConstBitStream
xa = ConstBitStream(filename='XA1.dcm')
print(searchDHTs(xa))
print(searchSOIs(xa))
print(searchEOIs(xa))
これを走らせると結果は 以下のようになります
[10352, 5398688, 6469600, 11807904, 17146912, 22482576, 27843824, 33224096, 38652544, 44104704, 49597104, 55103072, 60640800, 66181296, 71753056, 77315744, 82880880, 88431792, 93978432, 99509264, 105038752, 110572944, 116110208, 121646512, 127184304, 132726336, 138267056, 143811248]
[10336, 5398672, 6469584, 11807888, 17146896, 22482560, 27843808, 33224080, 38652528, 44104688, 49597088, 55103056, 60640784, 66181280, 71753040, 77315728, 82880864, 88431776, 93978416, 99509248, 105038736, 110572928, 116110192, 121646496, 127184288, 132726320, 138267040, 143811232]
[5398584, 6469504, 11807800, 17146808, 22482472, 27843728, 33224000, 38652440, 44104600, 49597008, 55102976, 60640696, 66181200, 71752952, 77315648, 82880776, 88431688, 93978328, 99509160, 105038656, 110572840, 116110104, 121646408, 127184208, 132726232, 138266952, 143811152, 149355088]
要するに XA1.dcmという DICOM XAファイルの中の JPEG Tagアドレスが検出されたのです もちろん XA fileのフレーム数分あります