python在线调用AI平台API的几种方法

本文介绍如何使用不同库和技术来调用人脸检测API,包括requests库、Popen调用curl命令、urllib库以及调用Windows DLL,提供了丰富的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、最简单的是用requests,支持post/get,也支持header格式,例如:

# face++ detect face attribute (jpg/png)
def detface(image_file, return_landmark=0):
    http_url = "https://api-cn.faceplusplus.com/facepp/v3/detect"   # url地址


    f = open(image_file, 'rb')  # 用open,而不用imread,保留jpg格式信息 #frame = cv2.imread(imgfile)

    img = base64.b64encode(f.read()) # 参数images:图像base64编码,把byte类型的img转换为str类型
    data = {"api_key": api_key, "api_secret": api_secret, "image_base64":img}  #post的表格


    #采用image_file参数时,要用multipart/form-data的方式上传

    #request.add_header('Content-Type', 'multipart/form-data')  

    response = requests.post(http_url, data=data)  # 发出连接请求
   
    res = response.content.decode('utf-8')      #读取结果,并解码
    return res


   
2.用Popen调用curl命令,例如(face++):

def compareTtoT(face_token_1,face_token_2):
    result=Popen('curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F \
        "api_key={api_key}" -F \
        "api_secret={api_secret}" -F \
        "face_token1={face_token_1}" -F \
        "face_token2={face_token_2}"'
        .format(api_key=api_key,api_secret=api_secret,face_token_1=face_token_1,
          face_token_2=face_token_2),shell=True,stdout=PIPE) 
    wait=""
    result=(result.stdout.read())
    return result

3、用urllib库(百度),例如:

# 识别图片中的人脸
def detFace(token, imgfile):
    f = open(imgfile, 'rb')  # 用open,而不用imread,保留jpg格式信息 #frame = cv2.imread(imgfile)
    img = base64.b64encode(f.read()) # 参数images:图像base64编码,把byte类型的img转换为str类型
    
params= {"face_fields":"age,beauty,expression,faceshape,glasses,landmark,race,qualities","image":img,"max_face_num":5}
    params = urllib.parse.urlencode(params).encode("utf-8")

    request_url = "https://aip.baidubce.com/rest/2.0/face/v1/detect"
    request_url = request_url + "?access_token=" + token
    request = urllib.request.Request(url=request_url, data=params)
    request.add_header('Content-Type', 'application/x-www-form-urlencoded')
    
    response = urllib.request.urlopen(request)
    content = response.read()

    return content
   

4、用调用windows DLL (科大讯飞)

from ctypes import *  
import ctypes
import time

# 加载 dll
kdxf_dll = ctypes.windll.LoadLibrary("msc_x64.dll")    

#设置返回值类型
kdxf_dll.QTTSSessionBegin.restype = ctypes.c_char_p

# 字符串数组的类型及变量
#str = b"engine_type = cloud, voice_name = xiaoyan, text_encoding = UTF8 "
#paramsp = ctypes.cast(str, ctypes.POINTER(ctypes.c_ubyte))  #
paramsp = create_string_buffer(b"engine_type = cloud, voice_name = xiaoyan, text_encoding = UTF8 ")

# POINTER:类型指针化,但不能用作参数
errorCode =  ctypes.c_int()
errorCodep =  ctypes.byref(errorCode)      


print( "sessionID = ", kdxf_dll.QTTSSessionBegin(paramsp, errorCodep) )
print("params =", repr(paramsp.raw))

print("errorCode = ", errorCode)



<think>嗯,用户问的是除了OpenAI库之外,Python还有什么调用API方法。我需要先理清楚用户的需求。可能用户已经知道使用官方的OpenAI库,但想探索其他方式,比如直接使用HTTP请求或者其他第三方库。我需要列举几种常见的方法,并给出具体的例子,这样用户可以根据自己的情况选择。 首先,用户可能想知道如何用Python内置的库,比如urllib或者requests来发送HTTP请求。requests库更简洁,应该重点介绍。然后,可能有其他第三方库,比如httpx,支持异步,这也是一个不错的点。另外,用户可能还想知道是否有非官方的OpenAI封装库,比如openai库的替代品,或者其他社区维护的库,比如Trio或aiohttp结合的方式。 还要考虑用户的使用场景。比如,如果用户需要异步处理,那么使用httpx或aiohttp会更合适。如果是简单的同步请求,requests足够。同时,可能需要提到环境配置,比如设置API密钥,处理响应和错误,这些细节对用户来说很重要。 需要确保每个方法都有示例代码,并且说明优缺点。比如直接使用requests更灵活,但需要自己处理请求和响应;而第三方库可能简化操作,但依赖外部维护。还要提醒用户注意API版本和认证方式,比如Bearer Token的使用。 另外,用户可能对RESTful API的基本概念不太熟悉,需要稍微解释一下,但问题中已经提到调用API方法,所以可能不需要深入。重点放在Python的实现方式上。 最后,检查是否有遗漏的方法,比如使用http.client这样的底层库,但可能不如requests方便,所以可以简要提及。总结的时候,根据需求推荐不同的方法,帮助用户做出选择。</think>在Python中,除了官方提供的`openai`库,还有多种方式可以调用API接口。以下是常见方法的逐步说明: --- ### 1. **直接使用`requests`库** 这是最通用的HTTP请求方法,适用于任何遵循RESTful规范的API。 ```python import requests # 配置参数 API_ENDPOINT = "https://api.openai.com/v1/chat/completions" API_KEY = "your-api-key" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } data = { "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Hello!"}] } # 发送POST请求 response = requests.post(API_ENDPOINT, headers=headers, json=data) # 处理响应 if response.status_code == 200: print(response.json()["choices"][0]["message"]["content"]) else: print(f"Error: {response.status_code}, {response.text}") ``` **优点**:灵活,可自定义请求头和参数;**缺点**:需手动处理错误和重试逻辑。 --- ### 2. **使用异步库`httpx`** 适合需要高性能异步请求的场景(如并发调用API)。 ```python import httpx import asyncio async def call_api(): API_ENDPOINT = "https://api.openai.com/v1/chat/completions" API_KEY = "your-api-key" async with httpx.AsyncClient() as client: response = await client.post( API_ENDPOINT, headers={"Authorization": f"Bearer {API_KEY}"}, json={"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Hello!"}]} ) return response.json() # 运行异步函数 result = asyncio.run(call_api()) print(result) ``` **优点**:支持异步,提升效率;**缺点**:需要理解异步编程模型。 --- ### 3. **使用第三方封装库** 社区维护的简化库(需注意兼容性和安全性): - **`openai`的替代品**:例如`openai-api`(非官方) ```bash pip install openai-api ``` ```python from openai_api import OpenAI client = OpenAI(api_key="your-api-key") response = client.chat_completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello!"}] ) print(response.choices[0].message.content) ``` **优点**:简化调用;**缺点**:依赖第三方维护,可能滞后于官方更新。 --- ### 4. **底层`http.client`模块** Python标准库中的底层实现(一般不推荐,但适合特殊需求): ```python from http.client import HTTPSConnection import json conn = HTTPSConnection("api.openai.com") headers = { "Authorization": "Bearer your-api-key", "Content-Type": "application/json" } body = json.dumps({ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Hello!"}] }) conn.request("POST", "/v1/chat/completions", body=body, headers=headers) response = conn.getresponse() print(response.read
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值