python-2.7imreaddng

Python 'rawpy._rawpy.RawPy' object has no attribute 'imread' after second pass


I try to process a series of DNG raw picture files and it all works well for the first pass (first fils). When I try to read the second DNG file during the second pass through the for-next loop, I receive the error message 'rawpy._rawpy.RawPy' object has no attribute 'imread' when executing the line "with raw.imread(file) as raw:".

import numpy as np
import rawpy as raw
import pyexiv2

from scipy import stats
for file in list:
    metadata = pyexiv2.ImageMetadata(file)
    metadata.read()
    with raw.imread(file) as raw:
       rgb16 = raw.postprocess(gamma=(1,1), no_auto_bright=True, output_bps=16)
       avgR=stats.describe(np.ravel(rgb16[:,:,0]))[2]
       avgG=stats.describe(np.ravel(rgb16[:,:,1]))[2]
       avgB=stats.describe(np.ravel(rgb16[:,:,2]))[2]
   print i,file,'T=', metadata['Exif.PentaxDng.Temperature'].raw_value,'C',avgR,avgG,avgB
   i+=1

I tried already to close the raw object but from googling I understand that is not necessary when a context manager is used. Help or suggestions are very welcome. Thanks in advance.


Solution

  • You're overwriting your alias of the rawpy module (raw) with the image you're reading. That means you'll get an error on the second pass through the loop.

    import rawpy as raw      # here's the first thing named "raw"
    #...
    
    for file in list:
        #...
    
        with raw.imread(file) as raw:    # here's the second
            #...
    

    Pick a different name for one of the variables and your code should work.