【问题标题】:How to save bag of words datas in python?如何在python中保存词袋数据?
【发布时间】:2018-03-11 05:57:12
【问题描述】:

这是我的代码:

sift=cv2.xfeatures2d.SIFT_create()
descriptors_unclustered=[]
dictionarysize=800
BOW=cv2.BOWKmeansTrainer(dictionarysize)
for p in training-paths :
    kp,dsc=sift.detectAndCompute(image,None)
    BOW.add(dsc)

dictionary=BOW.cluster()
bowdiction=cv2.BOWImgDescriptorExtractor(sift, cv2.BFMatcher(cv2.NORM_L2))
bowdiction.setvocabulary(dictionary)

我想保存这个 bowdiction 数据以供以后使用。我不想每次都等待这些计算,所以如何保存这些数据?

【问题讨论】:

    标签: python machine-learning scikit-learn text-classification


    【解决方案1】:

    为此使用pickle

    1. 保存弓到泡菜:

      import pickle
      
      sift=cv2.xfeatures2d.SIFT_create()
      descriptors_unclustered=[]
      dictionarysize=800
      BOW=cv2.BOWKmeansTrainer(dictionarysize)
      for p in training-paths :
          kp,dsc=sift.detectAndCompute(image,None)
          BOW.add(dsc)
      
      with open('bow_pickle.pickle', 'wb') as f:
      pickle.dump(f)
      
    2. 从pickle返回数据:

      import pickle    
      with open('bow_pickle.pickle', 'rb') as f:
          BOW = pickle.load(f)    
      dictionary=BOW.cluster()
      bowdiction=cv2.BOWImgDescriptorExtractor(sift,cv2.BFMatcher(cv2.NORM_L2))
      bowdiction.setvocabulary(dictionary)
      

    【讨论】:

    • 我可以用同样的方式保存字典吗?因为尤其是“dictionary=BOW.cluster()”需要这么多时间
    【解决方案2】:

    我知道这是旧的。但是当我来到这里并没有看到任何答案时,我尝试了一些方法并且成功了:

    dictionary=BOW.cluster() 是最耗时的。所以你只需要保存字典。这只是一个 ndarray:

    np.savetxt('bow_dict.txt', dictionary)
    
    loaded_dictionary = np.loadtxt('bow_dict.txt')
    

    然后继续

    bowdiction=cv2.BOWImgDescriptorExtractor(sift,cv2.BFMatcher(cv2.NORM_L2))
    bowdiction.setvocabulary(loaded_dictionary)
    

    【讨论】:

    • 您可能需要更改类型:loaded_dictionary = loaded_dictionary.astype(np.uint8)
    猜你喜欢
    • 2021-01-15
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2022-11-20
    • 1970-01-01
    • 2019-02-28
    • 2018-03-03
    相关资源
    最近更新 更多