Token生成(转载)

package main

import (
    "encoding/base64"
    "encoding/json"
    "log"
    "net/http"
    "strconv"
    "strings"

    "github.com/go-redis/redis"
    "github.com/satori/go.uuid"
)

type objMessage struct {
    UID      int64  `json:"uid"`
    UserName string `json:"user_name"`
}

type token struct {
    Token string `json:"token"`
}

type tokenResponse struct {
    Data token `json:"data"`
}

var client *redis.Client

func genToken(appid int, username string) string {
    u2, _ := uuid.NewV4()

    return u2.String()
}

func grantHandler(w http.ResponseWriter, r *http.Request) {
    encodeBasic := strings.TrimPrefix(r.Header["Authorization"][0], "Basic ")

    decodeBasic, _ := base64.StdEncoding.DecodeString(encodeBasic)

    auth := string(decodeBasic)

    appidStr := strings.Split(auth, ":")[0]

    appid, _ := strconv.Atoi(appidStr)

    var om objMessage

    err := json.NewDecoder(r.Body).Decode(&om)
    if err != nil {
        http.Error(w, err.Error(), 400)
        return
    }

    var tr tokenResponse

    tr.Data.Token = genToken(appid, om.UserName)

    fmap := make(map[string]interface{})
    fmap["user_id"] = int64(om.UID)
    fmap["app_id"] = int64(appid)
    fmap["notification_on"] = int8(1)
    fmap["forbidden"] = int(1)

    client.HMSet("access_token_"+tr.Data.Token, fmap)

    w.Header().Set("Content-Type", "application/json")

    w.WriteHeader(http.StatusOK)

    json.NewEncoder(w).Encode(tr)

}

func main() {
    http.HandleFunc("/auth/grant", grantHandler)

    client = redis.NewClient(&redis.Options{
        Addr:     "172.16.0.201:6379",
        Password: "", // no password set
        DB:       1,  // use default DB
    })

    log.Fatal(http.ListenAndServe(":8090", nil))
}

 

转载于:https://www.cnblogs.com/nuanshou/p/10553016.html

第二部分:数据标注工具 2.1 概述与分类 数据是AI模型的燃料,而高质量的数据标注是监督学习成功的先决条件。数据标注工具为创建高质量标注数据提供了高效、可扩展的平台。 主要分类: 计算机视觉(CV):图像分类、目标检测( bounding box)、图像分割(语义分割、实例分割)、关键点检测、 lane detection等。 自然语言处理(NLP):文本分类、命名实体识别(NER)、情感分析、关系抽取、文本摘要、机器翻译数据对齐。 音频处理:语音转写、声音事件检测、声纹识别、情感标签。 核心功能: 标注界面:提供专用于特定任务的、高效的标注UI(如画笔、矩形框、多边形工具)。 项目管理:支持团队协作、任务分配、进度跟踪、标注人员管理。 质量管理:包括标注指南编写、交叉验证(多个标注者标注同一数据)、仲裁流程、一致性计算(如计算Kappa系数或IoU)。 数据管理:支持多种数据格式的导入导出(COCO, VOC, PascalVOC, YOLO, TFRecord等)、版本控制、数据流水线集成。 2.2 技术架构与工作流程 一个典型的数据标注平台架构和工作流程如下所示: flowchart TD A[项目管理员] --> B[创建新标注项目] A --> C[定义标注规范<br>(Guideline)与Schema] B --> D[导入原始数据集] C --> D D --> E[分配任务给标注团队<br>(Assignee)] F[标注员] --> G[登录系统领取任务] G --> H{标注任务界面} subgraph H [核心标注循环] H1[加载未标注数据] H2[使用专业工具进行标注<br>(画框、分割、分类等)] H3[提交标注结果] end H --> I[保存状态<br>(待审核)] J[审核员/管理员] --> K[审核提交的标注结果] K --> L{质量检查} L -- 通过 --> M[将状态改为“已通过”] L -- 拒绝 --> N[打回给标注员并说明原因] N --> H M --> O[导出最终标注数据集] O --> P[用于模型训练] 2.3 代码集成示例:使用Python与CVAT API交互 许多现代标注工具(如CVAT、Labelbox、Scale AI)都提供了REST API,允许将标注流程集成到自动化ML流水线中。 以下示例演示如何使用Python和requests库与开源的CVAT工具进行交互,实现自动创建任务、上传数据、下载标注结果。 python import requests from requests.auth import HTTPBasicAuth import json import time # 1. 配置CVAT服务器信息 CVAT_URL = "http://localhost:8080" USERNAME = "admin" PASSWORD = "admin" auth = HTTPBasicAuth(USERNAME, PASSWORD) # 2. 获取CSRF Token(对于Django后端)或使用Basic Auth(视API版本而定) def get_csrf_token(): response = requests.get(f"{CVAT_URL}/api/auth/login", auth=auth) # 简化处理,实际中需要解析cookies或headers return response.cookies.get('csrftoken') # 3. 创建一个新的标注任务 def create_task(task_name, labels): url = f"{CVAT_URL}/api/tasks" headers = { 'Content-Type': 'application/json', 'X-CSRFToken': get_csrf_token() } payload = { "name": task_name, "labels": labels, # ... 其他参数 } response = requests.post(url, headers=headers, json=payload, auth=auth, cookies=requests.cookies.RequestsCookieJar()) if response.status_code == 201: return response.json() else: raise Exception(f"Failed to create task: {response.text}") # 定义标签Schema label_schema = [ {"name": "car", "type": "rectangle", "attributes": []}, {"name": "person", "type": "rectangle", "attributes": []}, {"name": "traffic_light", "type": "polygon", "attributes": []} ] # 创建任务 try: task_info = create_task("Urban Street Scene Detection", label_schema) task_id = task_info['id'] print(f"Task created with ID: {task_id}") except Exception as e: print(e) # 4. 上传图像到任务 (伪代码) # 通常需要通过 /api/tasks/{id}/data endpoint 上传文件或提供共享存储路径 # 此处省略具体实现,因为它可能很复杂,涉及文件上传格式 # 5. 检查任务状态,等待标注完成 def wait_for_annotation_completion(task_id, check_interval=60): url = f"{CVAT_URL}/api/tasks/{task_id}" while True: response = requests.get(url, auth=auth) task_status = response.json()['status'] print(f"Task status: {task_status}") if task_status == 'completed': break elif task_status == 'failed': raise Exception("Annotation task failed!") time.sleep(check_interval) # 6. 下载标注结果 (COCO格式示例) def download_annotations(task_id, format_name="COCO 1.0"): # 发起导出请求 export_url = f"{CVAT_URL}/api/tasks/{task_id}/exports" export_payload = {"format": format_name} headers = {'X-CSRFToken': get_csrf_token()} export_response = requests.post(export_url, headers=headers, json=export_payload, auth=auth) export_id = export_response.json()['id'] # 等待导出完成 download_ready = False while not download_ready: status_url = f"{CVAT_URL}/api/tasks/{task_id}/exports/{export_id}" status_response = requests.get(status_url, auth=auth) if status_response.json()['status'] == 'finished': download_ready = True time.sleep(2) # 下载导出的文件 download_url = f"{CVAT_URL}/api/tasks/{task_id}/exports/{export_id}/download" download_response = requests.get(download_url, auth=auth) with open(f"annotations_task_{task_id}.zip", "wb") as f: f.write(download_response.content) print("Annotations downloaded!") # 执行下载 # download_annotations(task_id) 2.4 挑战与未来趋势 挑战: 成本高:高质量标注需要大量人力,尤其对于复杂任务(如3D点云分割、医疗影像)。 一致性难题:不同标注者的主观判断会导致噪声,需要复杂的质量管理流程。 标注偏差:训练数据中的偏差会直接导致模型偏见。 敏捷性不足:传统标注流程慢,难以适应快速迭代的主动学习循环。 未来趋势: AI辅助标注:工具内置预测模型,预标注数据,人工仅需修正(如Segment Anything Model - SAM)。 主动学习:模型选择最有价值(最不确定)的数据点交给人类标注,最大化标注投入的回报。 合成数据:使用游戏引擎或生成式AI(如Diffusion Models)创建高质量的、带精准标注的合成数据,解决数据稀缺和隐私问题。 无监督/自监督学习:减少对大量人工标注的依赖,但标注工具仍用于验证和微调。 ———————————————— 版权声明:本文为优快云博主「zzywxc787」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/zzywxc787/article/details/150575454
最新发布
09-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值