2017-04-24 7 views
3

バイオフォーマットをPythonで使用して顕微鏡画像(.lsm、.czi、.lif) 、名前をつけます)、メタデータを印刷して、画像を表示します。 ome = bf.OMEXML(md)私にエラーが表示されます(下記)。私はそれがmdの中に保存されている情報について話していると思います。 mdの情報がすべてASCIIでないことが好きではありません。しかし、私はこの問題をどのように克服するのですか? これは私が書いたものである:Bioformats-Pythonエラー:OMEXML()を使用すると 'ascii'コーデックで文字 'u' xb5'をエンコードできません

import Tkinter as Tk, tkFileDialog 
import os 
import javabridge as jv 
import bioformats as bf 
import matplotlib.pyplot as plt 
import numpy as np 

jv.start_vm(class_path=bf.JARS, max_heap_size='12G') 

ユーザーが

iome = ome.image(0) # e.g. first image 
print(iome.get_Name()) 
print(iome.Pixels.get_SizeX()) 
print(iome.Pixels.get_SizeY()) 

はここだ

raw_data = [] 
    for z in range(iome.Pixels.get_SizeZ()): 
    raw_image = reader.read(z=z, series=0, rescale=False) 
    raw_data.append(raw_image) 
raw_data = np.array(raw_data) 

ショーは、メタデータたかっnumpyの配列に

#hiding root alllows file diaglog GUI to be shown without any other GUI elements 
root = Tk.Tk() 
root.withdraw() 
file_full_path = tkFileDialog.askopenfilename() 
filepath, filename = os.path.split(file_full_path) 
os.chdir(os.path.dirname(file_full_path)) 

print('opening: %s' %filename) 
reader = bf.ImageReader(file_full_path) 
md = bf.get_omexml_metadata(file_full_path) 
ome = bf.OMEXML(md) 

入れイメージで動作するファイルを選択し、 e私が手rror:

--------------------------------------------------------------------------- 
UnicodeEncodeError      Traceback (most recent call last) 
<ipython-input-22-a22c1dbbdd1e> in <module>() 
    11 reader = bf.ImageReader(file_full_path) 
    12 md = bf.get_omexml_metadata(file_full_path) 
---> 13 ome = bf.OMEXML(md) 

/anaconda/envs/env2_bioformats/lib/python2.7/site-packages/bioformats/omexml.pyc in __init__(self, xml) 
    318   if isinstance(xml, str): 
    319    xml = xml.encode("utf-8") 
--> 320   self.dom = ElementTree.ElementTree(ElementTree.fromstring(xml)) 
    321 
    322   # determine OME namespaces 

<string> in XML(text) 

UnicodeEncodeError: 'ascii' codec can't encode character u'\xb5' in position 1623: ordinal not in range(128) 

はここ独自の顕微鏡形式で代表test image

+1

1つの画像をアップロードできますか? –

+0

@ MaximilianPeters、私はテスト用の.lsmファイルを追加しました。任意の提案をいただければ幸いです。ありがとう! – puifais

答えて

1

は、サンプル画像を追加していただきありがとうございます。それはすごく助けになった!

エラーメッセージを再現できるMinimal, Complete and Verifiable Exampleになるまで、まず不要なTkinterコードをすべて削除しましょう。

import javabridge as jv 
import bioformats as bf 

jv.start_vm(class_path=bf.JARS, max_heap_size='12G') 

file_full_path = '/path/to/Cell1.lsm' 

md = bf.get_omexml_metadata(file_full_path) 

ome = bf.OMEXML(md) 

jv.kill_vm() 

我々は最初の3i SlideBook SlideBook6Reader library not foundに関するいくつかの警告メッセージを取得するが、我々はそれをcan apparently ignore

あなたのエラーメッセージがUnicodeEncodeError: 'ascii' codec can't encode character u'\xb5' in position 1623: ordinal not in range(128)を読み、あなたがprint mdmd = bf.get_omexml_metadata(file_full_path)後、メタデータ全体をXMLがプリントアウトされた追加した場合我々は位置1623

周りを見つけることができるか見てみましょう。さんはズームインしてみましょう:

>>> print md[1604:1627] 
PhysicalSizeXUnit="µm" 

ので、µ文字が犯人である、それは'ascii' codecでエンコードすることができません。

バックトレースバックでみる:

/anaconda/envs/env2_bioformats/lib/python2.7/site-packages/bioformats/omexml.pyc in __init__(self, xml) 
    318   if isinstance(xml, str): 
    319    xml = xml.encode("utf-8") 
--> 320   self.dom = ElementTree.ElementTree(ElementTree.fromstring(xml)) 
    321 
    322   # determine OME namespaces 

は、我々は、エラーが発生する前の行で、私たちは私たちのxmlutf-8にエンコードしていることがわかり、それが私たちの問題を解決する必要があります。ではなぜそれは起こりませんか?

我々はprint type(md)を追加する場合、コードは期待通り、我々は戻って<type 'unicode'>なく<type 'str'>を取得...だから、これはomexml.pyのバグです!

これを解決するには、以下を実行します(ルートにする必要があります)。

  • ゴー/anaconda/envs/env2_bioformats/lib/python2.7/site-packages/bioformats/
  • からif isinstance(xml, basestring):

basestringisinstance(xml, str):からomexml.py変更ライン318にomexml.pyc

  • を削除strunicodeのスーパークラスです。オブジェクトがstrまたはunicodeのインスタンスであるかどうかをテストするために使用されます。

    私はこのためにバグを報告したかったのですが、既にopen issueがあるようです。

  • +1

    ありがとうございました! (ああ、あなたのバイオは私に笑いを与えた:)) – puifais

    関連する問題