[vue] 11. pixiJS整合vue初体验

眨个眼就学会了Pixi.js theme: smartblue 本文正在参加「金石计划」 本文简介 带尬猴,我是德育处主任 当今的Web开发中,图形和动画已经成为了吸引用户注意力的重要手段之一。而 Pixi.js 作为一款高效、易用的2D渲染引擎,已经成为了许多开发者的首选~~(我吹的)~~。本文将为工友们介绍PixiJS的基础知识和使用方法,希望可以和工友们~~快速~~光速入门,掌握 Pixi.js 的用法。 ... 阅读详情
AI摘要

本文介绍了如何使用Pixi.js在Vue应用中实现图形绘制和拖拽功能,包括创建Container、使用Graphics绘制矩形、Sprite的动态操作以及封装良好的拖拽组件实例。

1.官方文档地址:

https://pixijs.io/examples/#/demos-basic/container.js

2.安装方法:

npm install --save pixi.js

3.示例代码及其效果:(pixi 5.1.2)

<template>
  <div id="app">
    <div id="pixi" style="z-index:-1;">  </div>
  </div>
</template>

<script>
import logo from '@/assets/logo.png'
import * as PIXI from 'pixi.js'
export default {
  data(){
    return{
    
    };
  },
  components: {
  },
  methods: {
    initPixi() {
      let app = new PIXI.Application({ width:800,height:600,backgroundColor: 0xEF6644 });
      document.getElementById("pixi").appendChild(app.view);
    
      var container=new PIXI.Container();
      container.x = app.screen.width / 2;
      container.y = app.screen.height / 2;
      app.stage.addChild(container)//容器加入舞台
      
     
      for(var i=0;i<7;i++){
        var g=new PIXI.Graphics();
        g.lineStyle(2, 0xFEEB77, 1);
        g.beginFill(0xDE3249)
        g.drawRect((i%5)*50, Math.floor(i/5)*50, 50, 50);//x,y,w,h
        container.addChild(g)
      }

      // for(var i=0;i<25;i++){
      //     var bunny = PIXI.Sprite.from(logo); 
      //     bunny.width=40;//控制精灵大小
      //     bunny.height=40;
      //     bunny.anchor.set(0.5);
      //     bunny.x=(i%5)*40;//控制精灵位置在哪
      //     bunny.y=Math.floor(i/5)*40;
      //     container.addChild(bunny)
      // //注意是加精灵的类实体进去容器,所以精灵要重新建,否则只有一个
      // }
     
      container.pivot.x = container.width / 2; //使得中心点在容器中点,而不是容器左上角
      container.pivot.y = container.height / 2;


      // Listen for animate update
      app.ticker.add(function(delta) {
        // just for fun, let's rotate mr rabbit a little
        // delta is 1 if running at 100% performance
        // creates frame-independent transformation
          //container.rotation += 0.01 * delta;
      }); 
    }
  },
  mounted: function() {
     this.initPixi();
  },
}
</script>

4.试试拖拉拽:

<template>
  <div id="app">
    <div id="pixi" style="z-index:-1;">  </div>
  </div>
</template>

<script>
import logo from '@/assets/logo.png'
import logo1 from '@/assets/111.png'
import * as PIXI from 'pixi.js'
let app = new PIXI.Application({ width:800,height:600,backgroundColor: 0xEF6644 });
let none=new PIXI.Texture.from(logo);
let gogo=new PIXI.Texture.from(logo1);

export default {
  data(){
    return{
        ww:80,//每个格子宽
        hh:50,//每个格子高
        xx:6,//横坐标格子数
        yy:7,//纵坐标格子数
        gap:10//格子间隔
    };
  },
  components: {
  },
  methods: {

    addBox(){
        var x=Math.floor(Math.random()*5)
        var y=Math.floor(Math.random()*5)
        console.log("gogo"+x+" "+y)
        var container=app.stage.getChildAt(0);
      
         container.getChildAt(25+x+y*5).texture=gogo
    },

   
    initPixi() {
      document.getElementById("pixi").appendChild(app.view);
      var container=new PIXI.Container();
      container.x = app.screen.width / 2;
      container.y = app.screen.height / 2;

      app.stage.addChild(container)//容器加入舞台
      
    

      //构造底部网格
      for(var i=0;i<this.xx*this.yy;i++){
        var g=new PIXI.Graphics();
        g.lineStyle(2, 0x000000, 1);
        g.beginFill(0xffffff)
        g.drawRect((i%this.xx)*this.ww, Math.floor(i/this.xx)*this.hh, this.ww, this.hh);//x,y,w,h
        container.addChild(g)
      }
      //构造中间空Texture
      for(var i=0;i<this.xx*this.yy;i++){
         var bunny = PIXI.Sprite.from(none); 
         bunny.width=Math.min(this.ww,this.hh)-this.gap;//控制精灵大小
         bunny.height=Math.min(this.ww,this.hh)-this.gap;
         bunny.x=(i%this.xx)*this.ww+this.ww/2-bunny.width/2;//精灵位置,居中
         bunny.y=Math.floor(i/this.xx)*this.hh+this.hh/2-bunny.height/2;
         bunny.interactive = true;
         bunny.buttonMode = true;
         //bunny.anchor.set(0.5);
         //bunny.on('pointerdown',()=>{ console.log("???"+this.x+" "+this.y);this.texture = gogo;});
         bunny.on('pointerdown',onDragStart)
         .on('pointerup',onDragEnd)
         .on('pointerupoutside',onDragEnd)
         .on('pointermove', onDragMove);
         function onDragStart(event){
          
            // store a reference to the data
            // the reason for this is because of multitouch
            // we want to track the movement of this particular touch
            this.data = event.data;
            this.alpha = 0.5;
            this.dragging = true;
            this.texture = gogo;
            this.orix=this.x
            this.oriy=this.y
         }
         var that=this
         function onDragEnd() {
              this.alpha = 1;
              this.dragging = false;
              // set the interaction data to null
              console.log("x:"+this.x+" y:"+this.y+"::"+that.ww+" "+that.hh+":: "+this.width+" "+this.height)
              this.texture=none

              //根据格子xy嵌合
              if(this.x<=that.xx*that.ww&&this.x>=0&&this.y<=that.yy*that.hh&&this.y>=0){
                  this.x=Math.floor(this.x/that.ww)*that.ww+that.ww/2-this.width/2;
                  this.y=Math.floor(this.y/that.hh)*that.hh+that.hh/2-this.height/2;
                  console.log("after x:"+this.x+" y:"+this.y)
              }

              //判断是否已经有格子了
              var container=app.stage.getChildAt(0);
              var tm=0
              for(var i=0;i<that.xx*that.yy;i++){
                  var t=container.getChildAt(that.xx*that.yy+i)
                  if(t.x==this.x&&t.y==this.y){
                      tm++;
                      if(tm==2){
                          this.x=this.orix
                          this.y=this.oriy
                          console.log("已经有格子了:"+this.data.x)
                          break;
                      }
                      
                  }
              }
               
              this.data = null;
          }
          function onDragMove() {
            if (this.dragging) {
                const newPosition = this.data.getLocalPosition(this.parent);
                this.x = newPosition.x;
                this.y = newPosition.y;
            }
          }
         container.addChild(bunny)
         //boxes.push(bunny)
      }
      container.pivot.x = container.width / 2; //使得中心点在容器中点,而不是容器左上角
      container.pivot.y = container.height / 2;

      


      //构造按钮
      var button=new PIXI.Sprite.from(logo)
      button.x=app.screen.width-100;
      button.y=app.screen.height-100;
      button.height=50;
      button.width=50;
      button.buttonMode = true;
      button.interactive = true;
      button.on('pointerdown',this.addBox);//绑定按钮事件与触发事件
      app.stage.addChild(button)



      // Listen for animate update
      app.ticker.add(function(delta) {
        // just for fun, let's rotate mr rabbit a little
        // delta is 1 if running at 100% performance
        // creates frame-independent transformation
          //container.rotation += 0.01 * delta;
      }); 
    }
  },
  mounted: function() {
     this.initPixi();
  },
}
</script>

5.一个封装较好的拖拉拽,有个经验,看图

<template>
  <div id="app">
    <div id="pixi" style="z-index:-1;">  </div>
  </div>
</template>

<script>
import logo from '@/assets/logo.png'
import logo1 from '@/assets/111.png'
import * as PIXI from 'pixi.js'
let app = new PIXI.Application({ width:1500,height:1500,backgroundColor: 0xffffff });
let none=new PIXI.Texture.from(logo);
let gogo=new PIXI.Texture.from(logo1);

export default {
  data(){
    return{
        ww:80,//每个格子宽
        hh:80,//每个格子高
        numx:6,//横坐标格子数
        numy:7,//纵坐标格子数
        gap:10//格子间隔
    };
  },
  components: {
  },
  methods: {

    addslot(){
        var x=Math.floor(Math.random()*5)
        var y=Math.floor(Math.random()*5)
        console.log("gogo"+x+" "+y)
        var container=app.stage.getChildAt(0);
      
         container.getChildAt(25+x+y*5).texture=gogo
    },

   
    initPixi() {
      document.getElementById("pixi").appendChild(app.view);
      var container=new PIXI.Container();
      container.x = 100;
      container.y = 200;

      app.stage.addChild(container)//容器加入舞台
      
      //文字样式
      var style = {
        fontFamily: 'Arial',
        fontSize: '12px',
        //fontStyle: 'italic',
        fontWeight: 'bold',
        fill: '#000000',
       // stroke: '#4a1850',
       // strokeThickness: 5,
        //dropShadow: true,
        //dropShadowColor: '#000000',
        //dropShadowAngle: Math.PI / 6,
        //dropShadowDistance: 6,
        wordWrap: true, //是否允许换行
        wordWrapWidth: 120, //换行执行宽度
        breakWords: true //支持中文
      }

      //构造底部网格bottom
      var bottom=new PIXI.Container();
      bottom.x=0
      bottom.y=0
      for(var i=0;i<this.numx*this.numy;i++){
        var g=new PIXI.Graphics();
        g.lineStyle(2, 0x000000, 1);
        g.beginFill(0xffffff)
        g.drawRect((i%this.numx)*this.ww, Math.floor(i/this.numx)*this.hh, this.ww, this.hh);//x,y,w,h
        bottom.addChild(g)
      }
      container.addChild(bottom)

      //构造middle容器
      var middle=new PIXI.Container()
      middle.x=600
      middle.y=0
      for(var i=0;i<this.numx*this.numy;i++){
         
         //构造middle的子容器slot
         var slot=new PIXI.Container();
         slot.x=(i%this.numx)*this.ww;
         slot.y=Math.floor(i/this.numx)*this.hh
         slot.interactive=true;
         slot.buttonMode=true;
         slot.on('pointerdown',onDragStart)
         .on('pointerup',onDragEnd)
         .on('pointerupoutside',onDragEnd)
         .on('pointermove', onDragMove);

         //子容器成员:边框
         var g=new PIXI.Graphics()
         g.lineStyle(2, 0x000000, 1);
         g.beginFill(0xffffff)
         g.drawRect(0, 0, this.ww, this.hh);//x,y,w,h
         slot.addChild(g)
         
         //子容器成员:文字
         style.wordWrapWidth=this.ww-30
         var richText = new PIXI.Text('带自定义效d果文本a',style);
         richText.x=0;//子容器成员坐标相对于子容器坐标
         richText.y=0;
         slot.addChild(richText)

         function onDragStart(event){
            //事件中的this相当于event.currentTarget
            this.diff = {x:event.data.global.x-this.x-container.x-this.parent.x,y:event.data.global.y-this.y-container.y-this.parent.y};//解决拖拽时的坐标问题
            this.data = event.data;
            this.alpha = 0.5;
            this.dragging = true;
            this.startpos={x:this.x,y:this.y};//初始坐标存起来
            console.log("开始坐标 x:"+this.x+" y:"+this.y+"误差坐标:"+this.diff.x+" "+this.diff.y+" 全局坐标:"+event.data.global.x+" "+event.data.global.y)
         }

         var that=this
         function onDragEnd() {
              this.alpha = 1;
              this.dragging = false;
              console.log("当前坐标 x:"+this.x+" y:"+this.y)
              //根据格子xy嵌合
              var dist={x:middle.x-bottom.x,y:middle.y-bottom.y};
              if(this.x+dist.x<=that.numx*that.ww
               &&this.x+dist.x>=0
               &&this.y+dist.y<=that.numy*that.hh
               &&this.y+dist.y>=0){
                  this.x=Math.floor((this.x+this.diff.x+(middle.x-that.numx*that.ww))/that.ww)*that.ww-(middle.x-that.numx*that.ww);
                  this.y=Math.floor((this.y+this.diff.y)/that.hh)*that.hh-0;
                  console.log("最后坐标 x:"+this.x+" y:"+this.y)
              }

              //判断是否已经有格子了
              var tm=0
              for(var i=0;i<that.numx*that.numy;i++){
                  var t=middle.getChildAt(i)
                  if(t.x==this.x&&t.y==this.y){
                      tm++;
                      if(tm==2){
                          this.x=this.startpos.x
                          this.y=this.startpos.y
                          console.log("已经有格子了:"+this.data.x)
                          break;
                      }
                      
                  }
              }
               
              this.data = null;
          }
          function onDragMove() {
            if (this.dragging) {                
                 const newPosition = this.data.getLocalPosition(this.parent);
                 this.x = newPosition.x-this.diff.x;
                 this.y = newPosition.y-this.diff.y;
                console.log("移动坐标 x:"+this.x+" y:"+this.y)
            }
           
          }
        // slot.addChild(bunny)
         middle.addChild(slot)
        
         //slotes.push(bunny)
      }
       container.addChild(middle)
      //container.pivot.x = container.width / 2; //使得中心点在容器中点,而不是容器左上角
      //container.pivot.y = container.height / 2;

      //构造按钮
      var button=new PIXI.Sprite.from(logo)
      button.x=app.screen.width-100;
      button.y=app.screen.height-100;
      button.height=50;
      button.width=50;
      button.buttonMode = true;
      button.interactive = true;
      button.on('pointerdown',this.addslot);//绑定按钮事件与触发事件
      app.stage.addChild(button)

      // Listen for animate update
      app.ticker.add(function(delta) {
        // just for fun, let's rotate mr rabbit a little
        // delta is 1 if running at 100% performance
        // creates frame-independent transformation
          //container.rotation += 0.01 * delta;
      }); 
    }
  },
  mounted: function() {
     this.initPixi();
  },
}
</script>

 

PixiJS教程(001):Pixi简介以及基本使用 PixiJS是一款高效的开源2D渲染引擎,支持WebGL和Canvas,适用于游戏、动画、数据可视化等场景。本文介绍了PixiJS的基本特点、安装方法以及图形绘制功能。通过Vue项目集成PixiJS,演示了如何创建矩形、圆形,并对图形进行缩放、位移、旋转等操作。PixiJS凭借其高性能渲染和易用API,成为开发富媒体交互应用的理想选择。 阅读详情

相关推荐

Canvas实现电流特效:技术解析与性能优化

动态图形效果是现代Web开发中提升用户体验的重要技术手段,其中Canvas因其高性能特性成为实现复杂动画的首选方案。通过Perlin噪声算法生成自然路径,配合粒子系统和辉光效果,可以创造出逼真的电流流动视觉效果。这种技术在数据可视化、科技感UI设计等领域具有广泛应用价值,特别是在需要实时反馈数据变化的监控大屏中表现突出。本文以电流卡片特效为例,详细对比了Canvas与SVG的性能差异,并提供了WebGL加速方案,帮助开发者在不同场景下实现最佳视觉效果与性能平衡。

weixin_33802505的博客 446

Pixi.js技术探索:开发者必备的视觉开发工具

pixi.js是一个开源的轻量级2D渲染引擎,专注于利用WebGL和HTML5中的Canvas技术来实现高性能的交互式图形和动画。它旨在提供一个简单而强大的工具集,使开发者能够轻松地创建各种类型的视觉效果,包括游戏、数据可视化、广告和其他富媒体应用程序。

ztK63LrD的博客 4927

H5斗地主源码实战拆解:从环境配置到商用改造

H5游戏源码是前端开发者接触实时交互、Canvas渲染与WebSocket通信的重要实践入口。理解其技术栈构成(如PixiJS渲染引擎、Socket.IO实时通信)、构建流程(Webpack/Vite工程化)和运行依赖(Node.js环境、服务端协同),是复用与改造的基础前提。这类源码本质并非开箱即用产品,而是需结合前端工程能力进行适配的开发资产——涉及环境识别、路径映射、跨域连接、版本兼容等关键调试环节。尤其在斗地主类实时对战场景中,洗牌随机性、牌型状态机判定、客户端预测同步等核心逻辑,直接关联游戏公平性

weixin_34326558的博客 355

vue中pixi 引擎使用,图片移动、添加边框,根据按钮缩放、旋转、删除的实现

vue 中pixi.js引擎的使用,和添加按钮实现移动、缩放、删除sprite功能的实现

weixin_44218877的博客 8790

Live2D看板娘轻量接入指南:三步实现网页情绪价值

Live2D是一种基于WebGL的2D角色实时渲染技术,通过预编译模型文件(.moc3/.model3.json)与轻量JS运行时(Cubism Core+WASM+PixiJS)协同工作,实现高性能、低耦合的交互式动画。其核心原理是将分层PSD模型转化为可编程骨骼驱动的视觉体,在不依赖后端、不阻塞首屏的前提下提供姿态响应、点击反馈与状态持久化能力。相比Canvas或SVG动画,Live2D在表现力、CPU占用与开发可控性之间取得更优平衡,广泛应用于技术博客、文档站、内部工具页等静态站点的情绪化增强场景。本

weixin_36289813的博客 102

vue-pixi:基于Vue3的PIXIJS渲染器

Vue-pixi 基于Vue3的PIXIJS渲染器

前端 & Flutter 游戏化场景开发库选型指南:从人物房间走动人手

目录前端 & Flutter 游戏化场景开发库选型指南:从人物房间走动人手一、Web 前端(Vue/React):基于 Canvas/WebGL 的方案1. Phaser.js:Web 端 2D 游戏开发 “全能选手”适用场景代码示例(React 集成)Vue 集成提示2. PixiJS:轻量高性能的 2D 渲染引擎适用场景关键补充3. Babylon.js:Web 端 3D 场景首选方案适用场景选型提示二、Flutter 跨平台:移动端优先的游戏化方案1. Flame:Flutter 生态的 2D 游戏引

m0_57836225的博客 1209

vue-pixijs:使用vue3.0开发pixijs

vue-pixijs 使用 vue3 的语法来开发 pixijs 实现原理 实现了自定义的 vue Renderer ,渲染使用 pixijs why 需求驱动学习 vue3 + pixijs 以开发小游戏的形式去完善 Renderer 进行中

微信小游戏开发实战:一人工作室的轻量级商业闭环

微信小游戏作为国内最大的轻量化游戏分发平台,其核心价值在于高转化、低门槛与强社交属性。理解其运行原理需聚焦平台规范(如4MB包体限制、广告触发合规性)、Web技术栈选型逻辑(PixiJS替代Unity的性能与体积优势),以及商业化本质——以用户行为漏斗驱动广告变现。技术价值体现在极简架构对迭代效率的提升,应用场景覆盖独立开发者、美术创业者与产品验证者。本文基于真实上线项目Vibe Gaming,详解从启动优化、状态机渲染到激励视频合规嵌入的全链路实践。

weixin_31115195的博客 116

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

源码编译部署篇(二)源码编译milvus成功后如何启动standalone并调试成功!

由于Milvus官方文档只提及如何使用docker安装部署Milvus,关于源码安装方式篇幅较少,因此,我整理撰写了如何通过源码编译方式成功安装Milvus,详见此篇。之所以选择这种复杂的安装方式,可以调试源码进而熟悉Milvus如何搭建整个框架支持AI上层应用功能。根据上篇步骤部署虽然可以成功,然而,我却不能成功启动Milvus服务,这个问题困扰了一两天,现在终于得以解决并能成功调试Milvus源码。接下来,分为三个部分介绍如何启动和成功调试。

qq_43893755的博客 3369

主流Canvas库横向评测与性能优化实战

Canvas作为HTML5的核心组件,为开发者提供了强大的2D绘图能力,但原生API存在维护复杂、缺乏对象化管理等痛点。Canvas库通过对象化架构和事件系统,显著提升了开发效率和性能。Konva.js、Fabric.js等主流库在通用绘图、游戏开发、数据可视化等领域各有优势。例如,Konva.js支持全框架声明式编程,Fabric.js内置图像滤镜,而PixiJS则通过WebGL加速实现高性能动画。在移动端优化方面,ZRender和Hilo提供了专门的触控和内存管理方案。性能优化技巧包括离屏Canvas预

weixin_34302798的博客 353

ubuntu 20.04系统离线安装nfs

ubuntu环境下,离线安装nfs

m0_62464865的博客 2244

3分钟轻松上手:免费打造你的专属互动桌宠BongoCat

你是否曾想过在枯燥的工作或学习时,桌面上能有一只可爱的小猫咪陪伴你?BongoCat正是这样一款神奇的跨平台互动桌宠应用,它能实时响应你的键盘、鼠标和游戏手柄操作,为你的桌面增添无限乐趣!无论你是Windows、macOS还是Linux用户,都能免费享受这款智能桌面伴侣带来的温馨陪伴。 ## 🐱 为什么选择BongoCat桌宠? 在众多桌面应用中,BongoCat独树一帜,它不仅仅是一个静态

gitblog_00447的博客 218

Sylvester结式法求解多项式方程

Sylvester结式法,结式,消元法,ctfshow 七夕杯 LUCK7,crypto,WriteUp

u010883831的博客 4533

基于 MATLAB 的精馏塔模拟仿真

基于 MATLAB 的精馏塔模拟仿真精馏塔是一种重要的化工设备,其中乙烯精馏塔和醋酸乙烯精馏塔是常见的两种精馏塔。本文基于 MATLAB 软件,给出了针对这两种精馏塔的模拟仿真代码。

与其临渊羡鱼,不如退而结网 904

LX Music 桌面版完整指南:一个搜索框聚合五大音乐平台的免费播放器(v2.12.2)

LX Music 桌面版(lx-music-desktop)是一款免费开源、基于 Electron(用网页技术开发桌面软件的工具)的跨平台音乐聚合播放器,把酷我、酷狗、QQ 音乐、网易云、咪咕五个平台的歌曲汇进同一个搜索框。适合三类人:只想免费听到在线歌曲的人、想用桌面歌词与快捷键控曲的人、希望把播放接到脚本自动化里的人。 ## 装之前先选对 先按系统选对安装包,装错类型会影响自动更新: |

gitblog_00035的博客 441

手把手教你学Simulink--基于光伏(PV)系统的建模与仿真场景:-不同天气条件下光伏系统的输出性能分析

本文介绍了使用Simulink和Simscape Electrical工具箱进行光伏系统建模与仿真的完整流程。内容涵盖准备工作、模型构建、仿真分析三大步骤,重点演示了如何模拟不同天气条件(光照强度、温度变化)对光伏输出性能的影响。通过添加PVArray模块、配置参数、设置环境变化条件、连接测量仪器等操作,实现了光伏系统在动态天气条件下的输出特性分析。文章还提供了仿真参数设置建议和结果分析方法,帮助用户理解环境因素与光伏性能的关联性,为光伏系统设计和优化提供参考。

MHD0815的博客 189

BongoCat终极指南:5分钟打造你的专属互动桌面猫咪伙伴

BongoCat是一款创新的跨平台互动桌宠应用,能够在你的桌面上放置一只可爱的猫咪,它会实时响应你的键盘输入、鼠标移动和游戏手柄操作,为日常工作学习增添趣味。这款开源应用完全免费,保护用户隐私,支持Windows、macOS和Linux三大操作系统,让你轻松拥有个性化桌面伴侣。 ## 🎯 价值主张:为什么选择BongoCat? 在数字工作环境中,BongoCat不仅仅是一个娱乐工具,更是提升

gitblog_00127的博客 341

从零构建简历智能匹配系统:AI技术助力高效招聘

本文详细介绍了简历智能匹配系统的开发过程,从数据收集、预处理、特征提取到模型匹配和结果展示,每一步都提供了详细的代码实例。通过使用TF-IDF、Word2Vec和BERT等技术,我们能够有效地将求职者的简历与职位描述进行匹配,从而提高招聘效率。未来,随着自然语言处理技术的进一步发展,简历智能匹配系统将变得更加智能和高效,为企业和求职者提供更好的服务。

理论都是虚的,代码才是王道。 310

爬虫瑞数5案例:联通

瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。

老衲爱洗头的博客 4470

pixi小游戏开发(vue+typescript)

一直以来都觉得typescript是以后前端发展的趋势,一些大厂的前端项目都已经在用ts来替代js了。 正好最近刚开始准备用pixi写个小游戏,因为刚开工没多久,于是今天就将之前的功能用ts去实现了一下,部分功能之前的博客也有提到过。 用的是vue-cli的3.11版本,并且选择了TypeScript,项目初始化后目录如下图所示(红框除外): 单个页面的代码截图如下: ...

weixin_30284355的博客 1133

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

100k+Stars!自媒体 / 剪辑师必备的开源视频工具全家桶,35 个开源视频工具,从剪辑到 AI 短剧一键生成

2026年开源视频工具全景地图发布,涵盖35+优质项目,覆盖AI视频生成、在线编辑器、短视频自动化等8大场景。核心亮点包括:腾讯HunyuanVideo、阿里Wan2.1等AI视频模型;OpenCut等浏览器在线编辑器;MoneyPrinterTurbo全自动短视频Pipeline;CVPR2024高光检测技术;以及MuseTalk数字人口型同步工具。所有工具均免费商用,支持本地部署,无需调用商业API,GitHub总星超10万,提供部署难度和技术栈说明,适合各层次用户快速上手。

flex8888的博客 4667

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PouchDB 适配器(Adapter)完全指南:浏览器、Node.js 与 HTTP 三种运行环境下的存储后端选择

PouchDB 本身并不是一个自包含的数据库,而是一层建立在其他数据库之上的、遵循 CouchDB 风格的抽象层。本篇指南以官方 [docs/adapters.md](https://link.gitcode.com/i/3f51e656be46987263c27916cc69d403) 为骨架,结合仓库源码,系统讲解 PouchDB 在浏览器(IndexedDB)、Node.js(LevelDB

gitblog_00325的博客 804

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

pypdf 上手指南:3 分钟搞定 PDF 合并、文本提取与水印

pypdf 是一个纯 Python 编写的 PDF 处理库,几行代码就能完成合并、拆分、文本提取、加水印这类日常任务。这篇文章带你从安装验证开始,先跑通第一个 PDF 操作,再按"你要完成的任务"逐个过常用功能,最后附排坑手册和一份分阶段的上手路线图。 ## 📇 项目名片:它是什么,边界在哪 pypdf 的定位是**面向开发者的 PDF 文件操作库**:读取、拆分、合并、裁剪、旋转、缩放、加

gitblog_00737的博客 997

剑网3辅助脚本怎么选?JX3Toy Lua 智能宏 3 步绑好快捷键,日常与副本自动化完整指南

如果你正在找一套免费的剑网3辅助脚本,JX3Toy 值得放进备选清单:它是一套用 Lua 写的智能宏集合,把各门派的输出循环、治疗节奏和日常操作交给脚本自动执行,你自己只管走位和躲机制。下面按"先装好、再玩一天、最后看效果"的顺序,讲清楚它怎么用、能省多少事。 ## 一、JX3Toy 是什么:先确认你的客户端够格 简单说,JX3Toy 是一堆"会看时机"的 Lua 脚本。传统宏只会按固定顺序放

gitblog_00095的博客 383
上一篇: [springboot]奇奇怪怪的经验(待更)
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值