You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode运行create_person.py遇401错误,求解决方案

问题:调用Cognitive Face API触发401权限错误

在VSCode中运行人脸识别相关脚本,add_student.py可正常执行,但create_person.py调用Cognitive Face API时抛出401权限错误,错误栈如下:

Traceback (most recent call last):
File "C:\xampp\htdocs\Face Recognition and RFID\create_person.py", line 13, in <module>
res = CF.person.create(personGroupId, str(sys.argv[1]))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vkurt\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\cognitive_face\person.py", line 71, in create
return util.request('POST', url, json=json)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vkurt\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\cognitive_face\util.py", line 103, in request
raise CognitiveFaceException(response.status_code,
cognitive_face.util.CognitiveFaceException: Error when calling Cognitive Face API:
status_code: 401
code: 401
message: Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource.

以下是create_person.py的代码:

import sys
import cognitive_face as CF
from global_variables import personGroupId, Key, endpoint
import sqlite3

personGroupId = 'user'
CF.BaseUrl.set(endpoint)
CF.Key.set(Key)
if len(sys.argv) != 1:
    res = CF.person.create(personGroupId, str(sys.argv[1]))
    print(res)
    extractId = str(sys.argv[1])[-2:]
    connect = sqlite3.connect("Face-DataBase")
    cmd = "SELECT * FROM Students WHERE ID = " + extractId
    cursor = connect.execute(cmd)
    isRecordExist = 0
    for row in cursor:                                                          
        isRecordExist = 1
    if isRecordExist == 1:                                                      
        connect.execute("UPDATE Students SET personID = ? WHERE ID = ?",(res['personId'], extractId))
    connect.commit()                                                           
    connect.close()
    print("Person ID successfully added to the database")

解决方案

针对401错误提示(无效订阅密钥或错误API端点),结合代码逐一排查:

  • 验证订阅密钥有效性
    确认global_variables.py中的Key是Azure Cognitive Face服务的有效密钥,且对应订阅处于活跃状态。可登录Azure门户,进入Face资源页面查看密钥和订阅状态。

  • 检查API端点正确性
    确保endpoint是对应Face资源的区域端点,格式需严格匹配(例如中国区端点为https://chinaeast2.api.cognitive.azure.cn/face/v1.0/),注意不要遗漏末尾的斜杠,也不要混用不同区域的端点。

  • 确认配置未被错误覆盖
    代码中导入personGroupId后又重新赋值为'user',如果实际使用的personGroupId是global_variables中定义的值,这会导致API调用时使用错误的分组ID,建议删除该行赋值,或确认'user'是正确的personGroupId。

  • 排查密钥与端点的设置逻辑
    确保在调用CF.person.create前,已正确执行CF.BaseUrl.set(endpoint)和CF.Key.set(Key),代码当前顺序无误,但需确认global_variables中的变量确实被正确导入(可通过打印Key和endpoint的值验证)。

  • 修复SQL注入风险(额外优化)
    代码中cmd = "SELECT * FROM Students WHERE ID = " + extractId存在SQL注入风险,建议替换为参数化查询:

    cursor = connect.execute("SELECT * FROM Students WHERE ID = ?", (extractId,))
    

内容的提问来源于stack exchange,提问作者Uni Versal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:43:15