fast.ai search_images_bing 抛出 PermissionDenied 错误

问题描述 投票:0回答:2

我正在关注 Gradient GPU 服务器上的 fast.ai 的 jupyter 笔记本教程。在第二个笔记本

02_production.ipynb
中,
search_images_bing
失败。

代码:

!pip install -Uqq fastbook
import fastbook
fastbook.setup_book()

from fastbook import *
from fastai.vision.widgets import *

key = os.environ.get('AZURE_SEARCH_KEY', 'XXX') # not showing my key :)
results = search_images_bing(key, 'grizzly bear', min_sz=128)
ims = results.attrgot('content_url')

错误:

---------------------------------------------------------------------------
ErrorResponseException                    Traceback (most recent call last)
<ipython-input-107-8c0a1d6b3765> in <module>
----> 1 results = search_images_bing(key, 'grizzly bear', min_sz=128)
      2 ims = results.attrgot('content_url')
      3 
      4 # ims = search_bing_by_term('grizzly bear', 100)
      5 len(ims)

/opt/conda/envs/fastai/lib/python3.8/site-packages/fastbook/__init__.py in search_images_bing(key, term, min_sz)
     50 def search_images_bing(key, term, min_sz=128):
     51     client = api('https://api.cognitive.microsoft.com', auth(key))
---> 52     return L(client.images.search(query=term, count=150, min_height=min_sz, min_width=min_sz).value)
     53 
     54 def plot_function(f, tx=None, ty=None, title=None, min=-2, max=2, figsize=(6,4)):

/opt/conda/envs/fastai/lib/python3.8/site-packages/azure/cognitiveservices/search/imagesearch/operations/_images_operations.py in search(self, query, accept_language, user_agent, client_id, client_ip, location, aspect, color, country_code, count, freshness, height, id, image_content, image_type, license, market, max_file_size, max_height, max_width, min_file_size, min_height, min_width, offset, safe_search, size, set_lang, width, custom_headers, raw, **operation_config)
    489 
    490         if response.status_code not in [200]:
--> 491             raise models.ErrorResponseException(self._deserialize, response)
    492 
    493         deserialized = None

ErrorResponseException: Operation returned an invalid status code 'PermissionDenied'

我已在 Azure/Bing.Search.v7/F1(免费套餐)上正确注册并设置 API 并获得密钥。

如何通过与 bing API 对话来克服此错误?

python jupyter bing fast-ai
2个回答
2
投票

似乎最新版本的 Bing 搜索断开了与 fast.ai 的

search_images_bing
功能的连接。

改进此处的解决方法https://forums.fast.ai/t/02-product-permissiondenied-error/65823/25?u=retuso,我能够创建适合的搜索功能的本地实例(几乎)完美地配合笔记本其余部分的自然使用。

本地功能:

def search_images_bing(key, term, max_images: int = 100, **kwargs):    
    params = {'q':term, 'count':max_images}
    headers = {"Ocp-Apim-Subscription-Key":key}
    search_url = "https://api.bing.microsoft.com/v7.0/images/search"
    response = requests.get(search_url, headers=headers, params=params)
    response.raise_for_status()
    search_results = response.json() 
   
    # returns an L object to be identical to the original function.
    return L(search_results['value'])

调用该函数的代码,注意新的 bing API 不使用原来的

content_url
标签,而是使用
contentUrl
:

# fits in nicely with the original code
results = search_images_bing(key, 'grizzly bear', min_sz=128)
ims = results.attrgot('contentUrl')

注意:我还没有使用 min_sz 参数。


0
投票

如果这不适合你 从 fastai.vision.utils 导入 search_images_bing

然后这样做

from fastai.vision.all import *
def search_images_bing(key, term, min_sz=128, max_images=150):    
     params = {'q':term, 'count':max_images, 'min_height':min_sz, 'min_width':min_sz}
     headers = {"Ocp-Apim-Subscription-Key":key}
     search_url = "https://api.bing.microsoft.com/v7.0/images/search"
     response = requests.get(search_url, headers=headers, params=params)
     response.raise_for_status()
     search_results = response.json()    
     return L(search_results['value'])
© www.soinside.com 2019 - 2024. All rights reserved.