# -*- coding: utf-8 -*-
"""Generate AI+ competition application docx."""

from __future__ import annotations

from pathlib import Path

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx.shared import Cm, Pt

FONT = '\u4eff\u5b8b_GB2312'   # 仿宋_GB2312
BODY_SZ = Pt(14)
LINE_SP = Pt(28)
INDENT = Pt(28)
LQ = '\u201c'   # left "
RQ = '\u201d'   # right "


def Q(s):
    """Replace << >> with Chinese quotation marks."""
    return s.replace('<<', LQ).replace('>>', RQ)


def _cjk(run, name):
    rPr = run._element.get_or_add_rPr()
    rf = rPr.find(qn('w:rFonts'))
    if rf is None:
        rf = OxmlElement('w:rFonts')
        rPr.insert(0, rf)
    rf.set(qn('w:eastAsia'), name)


def _p(doc, text, bold=False, indent=True, center=False,
       size=BODY_SZ, sb=Pt(0), sa=Pt(0)):
    p = doc.add_paragraph()
    if not text:
        return p
    r = p.add_run(text)
    r.font.name = FONT
    r.font.size = size
    r.bold = bold
    _cjk(r, FONT)
    fmt = p.paragraph_format
    fmt.line_spacing_rule = WD_LINE_SPACING.EXACTLY
    fmt.line_spacing = LINE_SP
    fmt.space_before = sb
    fmt.space_after = sa
    if center:
        fmt.alignment = WD_ALIGN_PARAGRAPH.CENTER
        fmt.first_line_indent = Pt(0)
    else:
        fmt.first_line_indent = INDENT if indent else Pt(0)
    return p


def h1(doc, text):
    return _p(doc, text, bold=True, indent=False, sb=Pt(10), sa=Pt(4))


def h2(doc, text):
    return _p(doc, text, bold=True, indent=True, sb=Pt(6), sa=Pt(2))


def body(doc, text):
    return _p(doc, Q(text))


def generate():
    doc = Document()
    for s in doc.sections:
        s.top_margin = Cm(2.54)
        s.bottom_margin = Cm(2.54)
        s.left_margin = Cm(3.17)
        s.right_margin = Cm(3.17)

    # Title
    _p(doc, Q('<<AI+>>项目申报书'),
       bold=True, center=True, size=Pt(22), sa=Pt(28))

    # ===== 一、作品概要 =====
    h1(doc, Q('一、作品概要'))

    body(doc,
        '当前，未成年人跨区域团伙盗窃犯罪呈现<<低龄化、团伙化、跨域化、遮脸化>>'
        '四大趋势，已成为基层刑侦部门面临的突出治理难题。犯罪团伙频繁跨市、跨县'
        '流窜作案，深夜遮脸入室或沿街盗窃，团伙成员动态变化、交叉重组，传统侦查'
        '手段在跨域串并、身份识别、团伙挖掘等关键环节面临严峻挑战：跨域协查依赖'
        '公文流转和电话沟通，时效性差；串并案高度依赖民警个人记忆和办案经验，覆盖'
        '面窄；嫌疑人戴口罩、压帽、侧脸作案导致人脸识别命中率大幅下降；处置手段'
        '以训诫为主，难以形成闭环阻断再犯。')

    body(doc,
        '针对上述痛点，本系统由XX市公安局刑事侦查支队民警自主研发，构建<<轻量级'
        '双引擎视觉感知+异构知识图谱+公安部大模型协同>>三阶技术体系，整合全市'
        '视频云人脸轨迹五千三百余万条、刑警笔录三十七万余条、案件数据三百四十余'
        '万条等多源公安数据。通过引入行人重识别（Person Re-identification，以下'
        '简称ReID）技术突破<<无脸场景>>识别瓶颈；构建涵盖8类节点、10类关系的异构'
        '知识图谱实现盗窃团伙自动挖掘；调用公安部AI大模型从笔录中自动提取作案手法'
        '特征、生成<<MO指纹>>实现跨域案件智能串并；建立分级处置闭环机制，将涉案'
        '未成年人从发现到矫治的全流程纳入数据化管理。')

    body(doc,
        '系统全栈本地化部署于公安内网，采用YOLO、InsightFace、FastReID、Neo4j、'
        'NetworkX等全开源技术栈，零采购成本，i5级普通办公电脑即可完整运行全部功能，'
        '数据不出公安网，完全符合<<民警自主研发、严禁使用商业化成品>>的竞赛要求。'
        '核心视觉检测模块已通过飙车炸街专项整治实战验证，累计处理卡口图片逾百万张，'
        '直接释放专职筛图警力2名，为本系统的技术路线可行性提供了坚实的实战基础。')

    # ===== 二、作品内容 =====
    h1(doc, Q('二、作品内容'))

    # --- (一) 功能介绍 ---
    doc.add_page_break()
    h1(doc, Q('（一）功能介绍'))

    h2(doc, Q('1.运行基础条件'))
    body(doc,
        '本系统基于B/S架构部署于公安内网环境，支持Windows 10与Linux双平台运行。'
        '硬件最低要求为Intel i5及以上处理器、16GB内存、500GB硬盘的普通办公电脑，'
        '无需独立GPU即可运行全部核心功能。系统通过Chrome浏览器（88版本及以上）'
        '访问，操作界面简洁直观，一线办案民警无需AI专业知识即可上手使用。软件环境'
        '需要：Python 3.12运行环境、Neo4j 5.x社区版图数据库（免费开源）、公安'
        '业务数据库接入权限（Oracle/Kingbase，涵盖视频云卡口数据、案件信息、人口'
        '信息等）以及公安部AI大模型API调用权限。系统提供Docker容器化一键部署和'
        'Windows本地直接运行两种部署方式，新环境上线周期约1至2天。')

    h2(doc, Q('2.核心功能与操作流程'))
    body(doc,
        '功能一：跨域案件智能串并。民警在系统中录入新发盗窃案件基本信息，系统调用'
        '公安部AI大模型自动从案件笔录中提取作案时段、入侵方式、目标类型、携带工具、'
        '赃物特征等多维度作案手法特征，生成标准化<<MO指纹>>向量，与全市历史案件库'
        '进行相似度匹配，自动推送疑似关联案件清单和串并依据，辅助民警快速完成跨区域'
        '串并研判。操作步骤：新建案件\u2192填写信息或导入笔录\u2192点击<<智能串并>>'
        '\u2192系统自动比对后返回关联案件列表\u2192民警确认或排除\u2192生成串并报告。')

    body(doc,
        '功能二：跨摄像头<<无脸追踪>>。针对嫌疑人在案发现场戴口罩、压帽、侧脸等'
        '人脸无法识别的典型盗窃场景，民警上传现场监控截图或视频片段，系统通过行人'
        '重识别（ReID）引擎自动提取体貌特征向量（衣着、体型、背包、步态等），在'
        '全市卡口视频库中进行跨摄像头检索匹配，自动重建嫌疑人跨时段、跨区域活动'
        '轨迹。对于人脸可识别的场景，系统同步调用InsightFace人脸识别引擎进行身份'
        '比对，形成<<有脸用脸、无脸用体貌>>的双引擎互补机制。')

    body(doc,
        '功能三：盗窃团伙结构挖掘。系统基于案件同案关系、卡口时空共现、同住同校、'
        '赃物流向等多维度数据自动构建异构知识图谱，运用Louvain社区发现算法识别紧密'
        '关联团伙，通过介数中心度分析定位团伙核心组织者，通过链路预测发现潜在同伙，'
        '一键生成可视化团伙关系图谱供民警研判决策。')

    body(doc,
        '功能四：涉案未成年人风险预警与分级处置。系统融合家庭（留守、困境、单亲）、'
        '个人（辍学、前科、夜游）、行为（涉案记录、卡口命中、多库共现）、同伴（图谱'
        '邻域涉案密度）、在校（不良行为记录）五个维度，自动计算风险评分并实施红黄蓝'
        '三级分级预警。根据预警等级自动触发对应处置流程：蓝色推送派出所关注、黄色'
        '启动法治副校长教育和民政帮扶、红色启动检察建议和专门学校矫治评估。处置结果'
        '和回访数据回流系统，形成<<预警\u2014处置\u2014回访\u2014模型优化>>持续闭环。')

    # --- (二) 技术方案与实现 ---
    doc.add_page_break()
    h1(doc, Q('（二）技术方案与实现'))

    h2(doc, Q('1.技术架构与实现路径'))
    body(doc,
        '系统采用五层分层架构设计。数据底座层整合Oracle（卡口图片、短信平台）、'
        'PostgreSQL/Kingbase（业务数据、人口信息）、Neo4j（图谱存储）、SQLite'
        '（工作流状态）四类数据库，汇聚视频云人脸轨迹、刑警笔录、案件信息、人口'
        '数据等8大类数据资产。三引擎技术层包括：视觉感知引擎（YOLO目标检测+'
        'InsightFace人脸识别+FastReID行人重识别）、语义分析引擎（公安部千问大模型'
        '笔录抽取+MO指纹生成+BGE文本嵌入）、时空分析引擎（卡口轨迹关联+跨摄像头'
        '特征重建+共现分析）。图谱研判层基于Neo4j存储涵盖未成年人、成年同伙、案件、'
        '卡口、车辆、学校、赃物、地址共8类节点和同案、同行、同籍、同校、同住等10类'
        '关系的异构知识图谱，运用NetworkX与PyTorch Geometric实现Louvain社区发现、'
        '介数中心度分析、链路预测等图算法。业务应用层提供串并研判、轨迹追踪、团伙'
        '挖掘、风险预警、处置派单等功能模块。协同机制层实现跨区域、跨警种、跨部门'
        '三跨数据与任务协同。')

    h2(doc, Q('2.开发工具与技术栈'))
    body(doc,
        '系统采用全开源技术栈，零采购成本。后端使用Python 3.12搭配Flask Web框架，'
        '前端使用Tailwind CSS+原生JavaScript+Cytoscape.js图谱可视化库。视觉模型'
        '采用YOLO系列（目标检测，2026年1月最新版）、InsightFace 0.7（人脸识别）、'
        'FastReID搭配OSNet_x0.25轻量主干网络（行人重识别），推理后端统一使用ONNX '
        'Runtime实现跨平台CPU推理。图谱引擎使用Neo4j 5.x社区版存储+NetworkX 3.x'
        '经典图算法+PyTorch Geometric图神经网络框架。大模型能力通过公安部千问3.5 '
        'API接入，无需本地部署GPU资源，实现<<用足公安部集约化算力、反哺基层一线>>'
        '的资源协同模式。文本嵌入采用bge-small-zh-v1.5轻量中文模型。开发管理采用'
        'Git版本控制，部署方式支持Docker容器化与Windows本地运行。')

    h2(doc, Q('3.关键技术与难点解决'))
    body(doc,
        '关键技术一：行人重识别（ReID）跨摄像头<<无脸追踪>>。采用京东开源FastReID'
        '框架搭配OSNet_x0.25轻量主干，导出ONNX格式后通过ONNX Runtime实现CPU推理，'
        '提取512维体貌特征向量，通过向量数据库实现毫秒级跨摄像头特征匹配。技术难点'
        '在于跨光照、跨角度条件下特征鲁棒性，通过数据增强预处理与时空约束后处理策略'
        '解决。关键技术二：MO指纹跨域串并算法。调用公安部千问大模型，通过结构化'
        'Prompt从笔录中自动抽取作案手法12维度特征并向量化，采用加权余弦相似度算法'
        '实现跨域案件智能串并。技术难点在于笔录文本非结构化程度高，通过多轮Prompt'
        '校验与规则兜底机制解决。关键技术三：异构知识图谱团伙挖掘。构建多源异构图谱'
        '后通过Louvain社区发现识别团伙边界，介数中心度定位核心组织者，链路预测发现'
        '潜在同伙。技术难点在于多源数据冲突，通过<<时间戳优先+严重度优先+多源投票>>'
        '三重仲裁规则解决。')

    h2(doc, Q('4.性能指标、可扩展性与安全保障'))
    body(doc,
        '性能方面：ReID特征提取在i5-12490F处理器上实测达到每秒8帧处理速度，单次'
        '跨库检索响应时间低于500毫秒；YOLO检测单机每分钟处理约500张卡口图片；图谱'
        '查询在十万节点规模下响应时间低于1秒。可扩展性方面：系统支持横向扩展至多县区'
        '并行部署，图谱支持增量更新，视觉模型支持在线热替换升级，数据接入层兼容'
        'Oracle 11g+、Kingbase V8、PostgreSQL 16等多种公安常用数据库。安全与稳定性'
        '方面：系统全栈部署于公安内网，数据全程不出公安网；采用Flask Session认证与'
        '操作审计机制，关键操作完整记录、可追溯；预警结果仅限办案民警内部使用，严格'
        '遵循《未成年人保护法》《个人信息保护法》相关规定；系统具备三档降级预案，'
        '确保核心业务在任何硬件环境下均可持续运行。')

    # --- (三) 实战成效 ---
    doc.add_page_break()
    h1(doc, Q('（三）实战成效'))

    h2(doc, Q('1.核心技术实战验证'))
    body(doc,
        '本系统核心视觉检测与身份识别模块的前身平台于2025年10月在全市飙车炸街专项'
        '整治工作专班正式投入实战应用，为本系统的技术路线可行性提供了充分验证。前身'
        '平台累计处理卡口图片逾100万张，YOLO识别准确率经实战验证达85%以上，直接释放'
        '专职筛图警力2名，使新进民警从每天8小时盯屏幕的重复劳动中解放，重新投入案件'
        '研判核查工作。专项期间全市飙车炸街警情同比下降11.8%，攻坚阶段降幅达37.4%，'
        '查处违法行为7692起，处置涉案未成年人20余名，实现零二次违法。上述实战成效'
        '充分证明了本系统<<AI替代人工感知+图情指一体化>>核心技术路线的可行性和实战'
        '价值。')

    h2(doc, Q('2.涉盗窃场景试运行成效'))
    body(doc,
        '2026年5月系统升级聚焦未成年人跨区域团伙盗窃方向以来，已在小规模试点中取得'
        '初步成效。一是通过MO指纹串并算法对近半年盗窃类案件样本进行回溯测试，成功将'
        '分布在不同县区的多起入室盗窃案件识别为疑似同一团伙作案，串并线索较传统人工'
        '比对提前发现。二是通过图谱社区发现算法在历史案件关系数据中识别出多个具有紧密'
        '关联的涉未成年人小团体，部分团伙成员此前未被关注。三是通过ReID跨摄像头追踪'
        '在嫌疑人遮脸条件下成功重建其跨区域活动轨迹，覆盖多处卡口点位，验证了<<无脸'
        '追踪>>技术路线在基层实战环境中的可行性。')

    h2(doc, Q('3.预期效能提升'))
    body(doc,
        '根据试点验证数据测算，系统全面投入使用后预计实现以下效能提升：跨域案件串并'
        '研判效率由人工平均3至5天压缩至分钟级自动响应，效率提升50倍以上；团伙核心'
        '组织者识别覆盖率较纯人工排查提升约3倍；嫌疑人轨迹回溯时间由传统逐点调阅'
        '监控的平均2天压缩至30分钟以内；涉未成年人盗窃案件全流程处置周期由平均7天'
        '压缩至2天以内，实现从发现、串并、追踪、挖掘到处置的全链条提速增效。')

    # --- (四) 创新亮点 ---
    doc.add_page_break()
    h1(doc, Q('（四）创新亮点'))

    h2(doc, Q('1.技术创新'))
    body(doc,
        '一是首创<<无脸追踪>>基层刑侦实战方案。针对未成年人盗窃团伙<<戴口罩、压帽、'
        '侧脸、夜间作案>>导致传统人脸识别失效的行业痛点，在省内率先将行人重识别'
        '（ReID）技术应用于基层刑侦跨域盗窃案件侦办，采用FastReID框架搭配OSNet'
        '轻量主干网络实现CPU实时推理，与InsightFace人脸识别形成<<有脸用脸、无脸用'
        '体貌>>双引擎互补机制，填补了基层公安在无脸场景下嫌疑人追踪能力的空白。')

    body(doc,
        '二是自研<<MO指纹>>跨域智能串并算法。结合公安部AI大模型的语义理解能力，'
        '从海量笔录中自动抽取作案手法多维度特征并向量化，形成可计算、可比对的犯罪'
        '手法数字指纹，实现跨区域案件的智能串并。该算法将长期依赖民警个人经验的串并'
        '研判能力转化为可积累、可传承的数字化知识资产，解决了<<老民警退休、办案经验'
        '流失>>的基层困境。')

    body(doc,
        '三是构建<<结构化关系+笔录语义>>双图谱融合研判体系。将数据库中的结构化人员'
        '关系（同案、同籍、同校、同住等）与笔录文本中的隐性语义关系（口供中提及的'
        '同伙、上下线、窝藏点等）通过身份证号、案件编号双锚点深度融合，实现<<数据库'
        '里查到的同学>>与<<口供里提到的同伙>>两类信息交叉验证，显著提升团伙挖掘的'
        '准确性和完整性。')

    h2(doc, Q('2.机制创新'))
    body(doc,
        '一是建立<<跨域案件AI驱动协查推送>>机制。打破传统跨区域案件协查依赖公文流转'
        '的模式，系统基于MO指纹和ReID比对结果自动识别跨域同一团伙作案，主动推送至'
        '案发地、居住地和前次作案地刑侦部门，将跨域协查从<<被动等公文>>转变为<<主动'
        '秒推送>>的智能协同模式。')

    body(doc,
        '二是建立分级处置闭环机制。整合公安训诫、检察建议、教育介入、民政帮扶、司法'
        '矫治五方力量，根据系统风险评分自动触发分级处置流程，处置结果和回访数据回流'
        '系统形成<<预警\u2014处置\u2014回访\u2014模型优化>>持续闭环，改变<<训诫即'
        '终结>>的传统模式。')

    body(doc,
        '三是建立<<侦查中心大模型推理资源共建共用>>机制，将跨警种技术资源协同从行政'
        '协调转化为常态化API接口，基层民警通过统一接口调用上级侦查中心GPU算力资源，'
        '实现公安部AI集约化算力向基层一线的有效辐射。')

    h2(doc, Q('3.业务创新'))
    body(doc,
        '重构传统刑侦<<事后串并>>工作流为<<事中预警+发案即关联>>新模式。传统跨域'
        '盗窃案件侦办遵循<<接报案\u2014单案侦查\u2014人工比对\u2014跨域协查>>的'
        '线性流程，时效性差、信息孤岛突出。本系统将AI能力嵌入侦查全链条，实现案件'
        '录入即自动串并、嫌疑人出现即自动追踪、团伙形成即自动预警、矫治完成即自动'
        '回访的全流程智能化闭环。该业务创新的最大价值在于：让一线民警从重复性低价值'
        '劳动中彻底解放，将有限的侦查警力聚焦于讯问、追逃、布控等不可替代的核心侦查'
        '活动，实现基层刑侦工作质效的根本性提升。')

    # --- (五) 推广前景 ---
    doc.add_page_break()
    h1(doc, Q('（五）推广前景'))

    h2(doc, Q('1.横向场景迁移能力'))
    body(doc,
        '本系统的核心技术架构和研判战法具有良好的横向迁移能力。ReID跨摄像头追踪、'
        'MO指纹串并算法、图谱团伙挖掘等核心能力可直接适配以下刑侦场景：电信网络'
        '诈骗团伙追踪与关系挖掘、系列入室盗窃串并案分析、涉未成年人聚众斗殴和寻衅'
        '滋事案件研判、盗抢机动车犯罪团伙分析、追逃人员轨迹重建等。技术组件采用'
        '模块化设计，更换数据源和调整Prompt模板即可适配新业务场景，迁移周期短、'
        '成本低。')

    h2(doc, Q('2.纵向地市推广基础'))
    body(doc,
        '系统采用全开源技术栈、零采购成本、普通办公电脑即可运行的轻量化设计，天然'
        '适配粤东西北中小地市基层公安机关的实际硬件条件和预算约束。系统提供Docker'
        '容器化一键部署方案和标准化数据接入规范文档，新地市上线部署预计1至2周即可'
        '完成。公安部AI大模型采用API方式接入，各地市可共享使用，无需重复建设算力'
        '基础设施。系统架构兼容Kingbase、PostgreSQL、Oracle等公安常用数据库，适配'
        '性强。')

    h2(doc, Q('3.综合效益分析'))
    body(doc,
        '经济效益方面：系统完全自主研发，零采购成本，可替代基层每年用于商业AI平台'
        '的采购预算；单套系统部署预计可释放2至3名民警从重复性筛查比对工作中解放。'
        '社会效益方面：通过AI赋能基层刑侦，有效提升跨域盗窃案件串并效率和团伙打击'
        '精度，减少未成年人因<<发现不及时、处置不到位>>而重复犯罪的概率，切实落实'
        '《预防未成年人犯罪法》<<分级预防、分级处遇>>的立法精神，助力<<少捕慎诉'
        '慎押>>刑事司法政策落地。')

    h2(doc, Q('4.发展愿景'))
    body(doc,
        '下一步计划在以下方向持续迭代演进：一是引入联邦学习机制实现跨地市图谱协同'
        '研判而数据不出本市，支撑更大范围的跨域案件串并和团伙追踪；二是接入视觉大'
        '模型（VLM）实现监控视频自然语言查询，进一步降低民警操作门槛；三是沉淀'
        '<<基层公安AI数字侦查方法论>>形成标准化文档和培训体系，为全省乃至全国基层'
        '公安数字侦查能力建设提供可复制的实践范本。同时积极推动相关发明专利申请和'
        '行业论文发表，持续扩大成果学术影响力和推广价值。')

    # Save
    out = Path(__file__).resolve().parent.parent / 'AI+\u9879\u76ee\u7533\u62a5\u4e66.docx'
    doc.save(str(out))
    print(f'OK -> {out}')
    return str(out)


if __name__ == '__main__':
    generate()
