369 lines
9.0 KiB
Markdown
369 lines
9.0 KiB
Markdown
# BaiduFanyiView Documentation
|
|
|
|
## 📄 **File Location**
|
|
`api/views/BaiduFanyiView.py`
|
|
|
|
### **Overview**
|
|
Provides comprehensive translation and language recognition services using Baidu Translate API. All views have been converted to asynchronous operations for optimal performance with Daphne ASGI server.
|
|
|
|
### **Class Details**
|
|
|
|
```python
|
|
@permission_classes([AllowAny])
|
|
class BaiduFanyiView(APIView):
|
|
async def post(self, request): # Text translation
|
|
|
|
@permission_classes([AllowAny])
|
|
class RecognizeLangTypeViews(APIView):
|
|
async def post(self, request): # Language recognition
|
|
|
|
@permission_classes([AllowAny])
|
|
class PictureRecognizeViews(APIView):
|
|
parser_classes = [MultiPartParser, FormParser]
|
|
async def post(self, request): # Picture translation
|
|
|
|
@permission_classes([AllowAny])
|
|
class SpeechRecognitionView(APIView):
|
|
parser_classes = [MultiPartParser, FormParser]
|
|
async def post(self, request): # Speech recognition
|
|
```
|
|
|
|
#### **Permissions**
|
|
- **Access Level**: Public (no authentication required)
|
|
- **Authentication**: None (`@permission_classes([AllowAny])`)
|
|
|
|
### **Method Details**
|
|
|
|
---
|
|
|
|
### **1. BaiduFanyiView (Text Translation)**
|
|
|
|
#### **Endpoint**: `POST /api/translate/`
|
|
|
|
##### **Description**
|
|
Translates text content between supported languages using Baidu Translate API.
|
|
|
|
##### **Parameters**
|
|
```json
|
|
{
|
|
"q": "text to translate", // Required: Text content (max 3000 characters)
|
|
"from_lang": "en", // Required: Source language code
|
|
"to_lang": "zh" // Required: Target language code
|
|
}
|
|
```
|
|
|
|
##### **Supported Languages**
|
|
Languages are loaded from `info.baidu_lang_info`:
|
|
- Check `languages` for supported language pairs
|
|
- Use `"auto"` for automatic source language detection
|
|
|
|
##### **Response Format**
|
|
```json
|
|
{
|
|
"message": "Success",
|
|
"code": "10000",
|
|
"data": {
|
|
"trans_result": [
|
|
{
|
|
"src": "Hello world",
|
|
"dst": "你好世界"
|
|
}
|
|
],
|
|
"from": "en",
|
|
"to": "zh"
|
|
}
|
|
}
|
|
```
|
|
|
|
##### **Error Responses**
|
|
|
|
| Code | Status | Description |
|
|
|------|--------|-------------|
|
|
| 400 | Bad Request | Invalid language codes or missing parameters |
|
|
| 400 | Bad Request | Text length exceeds 3000 characters |
|
|
| 503 | Service Unavailable | Baidu API temporarily unavailable |
|
|
|
|
---
|
|
|
|
### **2. RecognizeLangTypeViews (Language Recognition)**
|
|
|
|
#### **Endpoint**: `POST /api/recognize-language/`
|
|
|
|
##### **Description**
|
|
Automatically detects the language of provided text content.
|
|
|
|
##### **Parameters**
|
|
```json
|
|
{
|
|
"q": "text to recognize" // Required: Text content (max 3000 characters)
|
|
}
|
|
```
|
|
|
|
##### **Response Format**
|
|
```json
|
|
{
|
|
"message": "Success",
|
|
"code": "10000",
|
|
"data": {
|
|
"lang": "en",
|
|
"confidence": 0.98
|
|
}
|
|
}
|
|
```
|
|
|
|
##### **Error Responses**
|
|
|
|
| Code | Status | Description |
|
|
|------|--------|-------------|
|
|
| 400 | Bad Request | Text length exceeds 3000 characters |
|
|
| 400 | Bad Request | Language not in supported range |
|
|
| 503 | Service Unavailable | Baidu API temporarily unavailable |
|
|
|
|
---
|
|
|
|
### **3. PictureRecognizeViews (Picture Translation)**
|
|
|
|
#### **Endpoint**: `POST /api/picture-translate/`
|
|
|
|
##### **Description**
|
|
Translates text within images using Baidu's OCR and translation capabilities.
|
|
|
|
##### **Request Format**
|
|
Multipart form data with file upload and query parameters.
|
|
|
|
##### **Parameters**
|
|
**Form Data:**
|
|
- `file`: Image file (required)
|
|
|
|
**Query Parameters:**
|
|
- `from_lang`: Source language code (required)
|
|
- `to_lang`: Target language code (required)
|
|
- `picture`: Image format type (required, e.g., "jpg", "png")
|
|
|
|
##### **Request Example**
|
|
```bash
|
|
curl -X POST http://your-api.com/api/picture-translate/
|
|
-H "Content-Type: multipart/form-data"
|
|
-F "file=@image.jpg"
|
|
-G --data-urlencode "from_lang=en"
|
|
--data-urlencode "to_lang=zh"
|
|
--data-urlencode "picture=jpg"
|
|
```
|
|
|
|
##### **Response Format**
|
|
```json
|
|
{
|
|
"message": "Success",
|
|
"code": "10000",
|
|
"data": {
|
|
"words_result_num": 2,
|
|
"words_result": [
|
|
{
|
|
"words": "Hello World"
|
|
},
|
|
{
|
|
"words": "Welcome"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
##### **Error Responses**
|
|
|
|
| Code | Status | Description |
|
|
|------|--------|-------------|
|
|
| 400 | Bad Request | Invalid language codes |
|
|
| 400 | Bad Request | Unsupported image format |
|
|
| 503 | Service Unavailable | Baidu API temporarily unavailable |
|
|
|
|
---
|
|
|
|
### **4. SpeechRecognitionView (Speech Recognition)**
|
|
|
|
#### **Endpoint**: `POST /api/speech-recognition/`
|
|
|
|
##### **Description**
|
|
Recognizes and translates speech/audio content.
|
|
|
|
##### **Request Format**
|
|
Multipart form data with voice file upload and query parameters.
|
|
|
|
##### **Parameters**
|
|
**Form Data:**
|
|
- `voice`: Audio file (required)
|
|
|
|
**Query Parameters:**
|
|
- `speech_type`: Audio format (required, e.g., "pcm")
|
|
- `from_lang`: Source language code (required)
|
|
- `to_lang`: Target language code (required)
|
|
|
|
##### **Request Example**
|
|
```bash
|
|
curl -X POST http://your-api.com/api/speech-recognition/
|
|
-H "Content-Type: multipart/form-data"
|
|
-F "voice=@audio.wav"
|
|
-G --data-urlencode "speech_type=pcm"
|
|
--data-urlencode "from_lang=en"
|
|
--data-urlencode "to_lang=zh"
|
|
```
|
|
|
|
##### **Response Format**
|
|
```json
|
|
{
|
|
"message": "Success",
|
|
"code": "10000",
|
|
"data": {
|
|
"result": "你好世界",
|
|
"corpus_no": "123456789",
|
|
"status": 0
|
|
}
|
|
}
|
|
```
|
|
|
|
##### **Error Responses**
|
|
|
|
| Code | Status | Description |
|
|
|------|--------|-------------|
|
|
| 400 | Bad Request | Unsupported speech type |
|
|
| 400 | Bad Request | Invalid language codes |
|
|
| 503 | Service Unavailable | Baidu API temporarily unavailable |
|
|
|
|
---
|
|
|
|
### **Implementation Details**
|
|
|
|
#### **Async Operations**
|
|
All views use `aiohttp` for non-blocking HTTP requests:
|
|
|
|
```python
|
|
async with aiohttp.ClientSession() as session:
|
|
async with session.post(url, params=payload, headers=headers) as response:
|
|
result = await response.json()
|
|
```
|
|
|
|
#### **Fallback Mechanism**
|
|
If `aiohttp` is not available, views fall back to synchronous `requests`:
|
|
|
|
```python
|
|
if aiohttp:
|
|
# Use async aiohttp
|
|
else:
|
|
# Fallback to sync requests
|
|
```
|
|
|
|
#### **Configuration**
|
|
Baidu API configuration loaded from:
|
|
- `info.baidu_fanyi_appid.py`: appid, appkey, endpoint
|
|
- `info.baidu_lang_info.py`: languages, auto_lang, cuid, mac
|
|
|
|
---
|
|
|
|
### **Security & Performance**
|
|
|
|
#### **Rate Limiting**
|
|
- Respects Baidu API rate limits
|
|
- No additional rate limiting implemented
|
|
- Consider implementing client-side rate limiting
|
|
|
|
#### **Input Validation**
|
|
- Text length limit: 3000 characters
|
|
- Language code validation
|
|
- File format validation for media endpoints
|
|
|
|
#### **Error Handling**
|
|
- Comprehensive try-catch blocks
|
|
- Meaningful error messages
|
|
- Graceful degradation when service unavailable
|
|
|
|
---
|
|
|
|
### **Usage Examples**
|
|
|
|
#### **Python Client**
|
|
```python
|
|
import aiohttp
|
|
import asyncio
|
|
|
|
async def translate_text():
|
|
async with aiohttp.ClientSession() as session:
|
|
payload = {'q': 'Hello', 'from_lang': 'en', 'to_lang': 'zh'}
|
|
async with session.post('http://api/translate/', json=payload) as resp:
|
|
return await resp.json()
|
|
|
|
# Run async operation
|
|
result = asyncio.run(translate_text())
|
|
```
|
|
|
|
#### **JavaScript Frontend**
|
|
```javascript
|
|
// Text translation
|
|
const translate = async (text, fromLang, toLang) => {
|
|
const response = await fetch('/api/translate/', {
|
|
method: 'POST',
|
|
headers: {'Content-Type': 'application/json'},
|
|
body: JSON.stringify({q: text, from_lang: fromLang, to_lang: toLang})
|
|
});
|
|
return await response.json();
|
|
};
|
|
```
|
|
|
|
#### **Testing Endpoints**
|
|
```bash
|
|
# Test text translation
|
|
curl -X POST http://localhost:8000/api/translate/
|
|
-H "Content-Type: application/json"
|
|
-d '{"q":"Hello world","from_lang":"en","to_lang":"zh"}'
|
|
|
|
# Test language recognition
|
|
curl -X POST http://localhost:8000/api/recognize-language/
|
|
-H "Content-Type: application/json"
|
|
-d '{"q":"Hello world"}'
|
|
```
|
|
|
|
---
|
|
|
|
### **Monitoring & Debugging**
|
|
|
|
#### **Logging**
|
|
- Request data logged via `print(request.data)`
|
|
- API responses logged via `print(sign)` in speech recognition
|
|
- Consider adding structured logging for production
|
|
|
|
#### **Performance Metrics**
|
|
- Async operations reduce blocking time
|
|
- Concurrent requests handled efficiently
|
|
- Memory usage optimized with streaming where possible
|
|
|
|
#### **Health Checks**
|
|
- Service availability can be checked via API status
|
|
- Consider implementing health check endpoints
|
|
|
|
---
|
|
|
|
### **Integration Notes**
|
|
|
|
#### **Django Integration**
|
|
```python
|
|
# urls.py
|
|
from django.urls import path
|
|
from api.views import BaiduFanyiView, RecognizeLangTypeViews, PictureRecognizeViews, SpeechRecognitionView
|
|
|
|
urlpatterns = [
|
|
path('translate/', BaiduFanyiView.as_view(), name='translate'),
|
|
path('recognize-language/', RecognizeLangTypeViews.as_view(), name='recognize-language'),
|
|
path('picture-translate/', PictureRecognizeViews.as_view(), name='picture-translate'),
|
|
path('speech-recognition/', SpeechRecognitionView.as_view(), name='speech-recognition'),
|
|
]
|
|
```
|
|
|
|
#### **Running with Daphne**
|
|
```bash
|
|
pip install aiohttp
|
|
daphne chunyu_project.asgi:application --port 8000
|
|
```
|
|
|
|
---
|
|
|
|
**Last Updated**: Current Session
|
|
**Version**: 1.0 |