Partage
  • Partager sur Facebook
  • Partager sur Twitter

ImportError: No module named common

Sujet résolu
    23 mars 2015 à 21:40:36

    Bonsoir,

    En école d'ingé, je travaille sur un projet dont le sujet est la calibration d'une caméra. On me demande, dans un premier temps, de comprendre et d'expliquer un bout de code. Néanmoins, quand je tente de l'exécuter, j'ai l'erreur suivante : ImportError: No module named common. Je dois tout d'abord préciser que je ne connais pas le language python (les cours d'algo sont en ADA dans mon école, et j'ai fais un peu de C), et en aillant parcouru le cours de python du site du zero, je n'ai pas trouvé de solution. J'ai trouvé une partie de réponse sur ce site : http://stackoverflow.com/questions/338768/python-importerror-no-module-named mais je ne comprends pas tout : faut-il que je crée un fichier __init__.py?

    Voici le code en question :

    #!/usr/bin/env python
    import numpy as np
    import cv2
    # local modules
    from common import splitfn
    # built-in modules
    import os
    USAGE = '''
    USAGE: calib.py [--save <filename>] [--debug <output path>] [--square_size] [<image mask>]
    '''
    if __name__ == '__main__':
    	import sys
    	import getopt
    	from glob import glob
    	args, img_mask = getopt.getopt(sys.argv[1:], '', ['save=', 'debug=', 'square_size='])
    	args = dict(args)
    	try:
    		img_mask = img_mask[0]
    	except:
    		img_mask = '../data/left*.jpg'
    
    	img_names = glob(img_mask)
    	debug_dir = args.get('--debug')
    	square_size = float(args.get('--square_size', 1.0))
    
    	pattern_size = (9, 6)
    	pattern_points = np.zeros( (np.prod(pattern_size), 3), np.float32 )
    	pattern_points[:,:2] = np.indices(pattern_size).T.reshape(-1, 2)
    	pattern_points *= square_size
    
    	obj_points = []
    	img_points = []
    	h, w = 0, 0
    	for fn in img_names:
    		print 'processing %s...' % fn,
    		img = cv2.imread(fn, 0)
    		if img is None:
    			print "Failed to load", fn
    			continue
    
    		h, w = img.shape[:2]
    		found, corners = cv2.findChessboardCorners(img, pattern_size)
    		if found:
    			term = ( cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1 )
    			cv2.cornerSubPix(img, corners, (5, 5), (-1, -1), term)
    		if debug_dir:
    			vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
    			cv2.drawChessboardCorners(vis, pattern_size, corners, found)
    			path, name, ext = splitfn(fn)
    			cv2.imwrite('%s/%s_chess.bmp' % (debug_dir, name), vis)
    		if not found:
    			print 'chessboard not found'
    			continue
    		img_points.append(corners.reshape(-1, 2))
    		obj_points.append(pattern_points)
    	
    		print 'ok'
    
    	rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (w, h), None, None)
    	print "RMS:", rms
    	print "camera matrix:\n", camera_matrix
    	print "distortion coefficients: ", dist_coefs.ravel()
    	cv2.destroyAllWindows()
    


    et l'erreur en question :
    File "calibrate.py", line 8, in <module> from common import splitfn ImportError: No module named common


    Quelqu'un pourrait-il m'aider, je suis un peu perdu là. Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      23 mars 2015 à 22:40:05

      Bonjour,

      Pour pouvoir t'aider, ça aiderait d'avoir la structure de ton projet. Ainsi, nous pourrions savoir si le module common est dans ton projet, ou s'il est dans le PATH de ton interpréteur python (ce qui est tout à fait possible).

      Dans le cas où le dossier common fait partie de ton application, si tu utilises Python 2.x, alors oui, il faut un fichier __ini__.py dans ce dossier. Si tu utilises python 3.x, alors le fichier init n'est plus nécessaire.

      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2015 à 22:49:37

        Ce code vient de la librairie opencv, dans les samples (exemples) calibrate.py https://github.com/Itseez/opencv/blob/master/samples/python2/calibrate.py

        Dans ce même répertoire se trouve un fichier common.py contenant la fonction splitfn.

        Donc pour faire fonctionner ce code correctement, il faut le lancer depuis le dossier opencv/samples/python2. Si tu n'as pas ce dossier, alors va sur ce lien (https://github.com/Itseez/opencv/blob/master/samples/python2/common.py), et copie le tout dans un fichier que tu appelles common.py et que tu places dans le même répertoire que le fichier que tu nous as montré.

        • Partager sur Facebook
        • Partager sur Twitter
          23 avril 2016 à 16:32:29 - Message modéré pour le motif suivant : Les insultes ne sont pas tolérées


          ImportError: No module named common

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown