Skip to content

C#面试题

什么是类

类是创建对象的模版。它是包含属性和方法,我们可以从一个类中创建许多对象实例

面向对象的概念是什么

封装、抽象、多态和继承是面向对象的编程的主要概念

  1. 封装是指将对象的状态(属性)和行为(方法)封装在类中,并控制外部对这些属性和方法的访问,通过封装,可以隐藏对象的内部实现细节、只暴露必要的接口,从而增强代码的安全性和可维护性
  2. 继承:允许一个类从另一个类继承属性和方法,从而实现代码复用,通过继承,子类可以扩展或修改父类的行为
  3. 多态:允许对象在不同的上下文中表现为不同的形式,多态有两种方式
    • 编译时多态(静态多态):通过方法重载实现
    • 运行时多态(动态多态):通过方法重写实现

什么是对象

对象是一个类的实例,我们通过它访问该类的功能,我们可以使用new关键字来创建一个对象,在内存中创建对象的类保存有关该函数、数据成员和行为的信息

什么是构造函数,他有哪些不同的类型

构造函数就像一个与类同名的方法,但是它是唯一的方法,即使没有创建,编译器也会在创建类的对象时在类的内存中创建一个默认的构造函数。构造函数用于使用一些默认值初始化对象,默认构造函数、参数化构造函数,复制构造函数、静态构造函数和私有构造函数都是不同的构造类型

C#中的析构函数是什么?

析构函数清除内存以释放资源,并由垃圾收集器自动管理


析构函数(Destructor)是一种特殊的函数,用于在对象生命周期结束时执行清理操作。析构函数通常在对象被垃圾回收器(Garbage Collector)回收之前调用,用来释放对象占用的非托管资源(如文件句柄、数据库连接等),而托管资源则由垃圾回收器自动处理。

c#是托管代码还是非托管代码

C# 是托管代码,因为公共语言运行时将代码编译为中间语言代码。C++ 将提供非托管代码的示例。托管代码只是指其执行由运行时管理的代码。

什么是值类型什么是引用类型

值类型直接包含数据,它们在栈(stack)上分配内存。当我们将一个值类型变量赋给另一个值类型变量时,会复制其值。因此,两个变量是完全独立的,修改其中一个不会影响另一个。

常见的值类型包括:

  • 基本类型:int, float, double, char, bool, decimal
  • 结构体(struct):用户定义的结构也是值类型
  • 枚举(enum)

引用类型变量存储的是对象的引用(地址),而对象本身存储在堆(heap)上。当我们将一个引用类型变量赋给另一个引用类型变量时,实际上是复制了该对象的引用(指向同一个内存地址),因此两个变量指向同一个对象,修改其中一个变量会影响另一个变量。

常见的引用类型包括:

  • 类(class)
  • 接口(interface)
  • 委托(delegate)
  • 数组(array)

什么是命名空间,它是强制性的吗?

命名空间是一种以相同名称组织相同组或功能的类的方法。我们可以称它为模块。尽管将类放在命名空间中并不是强制性的。

用例子解释 C# 中的注释类型。

C# 中有三种类型的注释。

  • 单行注释
  • 多行注释
  • XML 注释

单行注释的示例是://嘿,这是单行注释 多行注释的一个例子是:/这是一个多行注释写成两行/ XML 注释的一个示例是:///概括///这里可以写任何东西///概括

什么是序列化?

当我们想通过网络发送一个对象时,我们必须将该对象转换为字节流。序列化是将对象转换为字节流的过程。为了便于对象进行可序列化,它应该实现 ISerialize 接口。反序列化的过程是从字节流创建对象的逆过程。

如何在同一个类中实现多个具有相同方法名的接口?

通过显式接口实现,可以在一个类中实现多个具有相同方法名的接口

c#
using System;

interface IAnimal
{
    void Speak();
}

interface IBird
{
    void Speak();
}

class Creature : IAnimal, IBird
{
    // 显式实现 IAnimal 接口中的 Speak 方法
    void IAnimal.Speak()
    {
        Console.WriteLine("Animal sound!");
    }

    // 显式实现 IBird 接口中的 Speak 方法
    void IBird.Speak()
    {
        Console.WriteLine("Bird sound!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Creature creature = new Creature();

        // 需要通过接口引用调用相应的 Speak 方法
        IAnimal animal = creature;
        animal.Speak();  // 输出:Animal sound!

        IBird bird = creature;
        bird.Speak();    // 输出:Bird sound!
    }
}

什么是虚方法,它与抽象方法有什么不同?

**虚方法:**是指可以在基类中定义并且允许子类重写的方法。基类提供了虚方法的默认实现,子类可以选择是否重写这个方法。如果子类不重写虚方法,那么当调用该方法时,将使用基类的实现。

虚方法:

  1. 又一个默认实现

  2. 可以使用基类实现,也可以使用override关键字重写这个方法

  3. 通过基类引用调用一个虚方法时,如果子类重写了该方法,则会调用子类实现,这种行为称为运行时多态

    c#
    class Animal
    {
        // 虚方法
        public virtual void Speak()
        {
            Console.WriteLine("Animal makes a sound.");
        }
    }
    
    class Dog : Animal
    {
        // 重写虚方法
        public override void Speak()
        {
            Console.WriteLine("Dog barks.");
        }
    }
    
    class Program
    {
        static void Main()
        {
            Animal animal = new Animal();
            animal.Speak();  // 输出:Animal makes a sound.
    
            Animal dog = new Dog();
            dog.Speak();  // 输出:Dog barks.
        }
    }

抽象方法

  1. 抽象方法只有方法签名,没有具体实现

  2. 所有继承抽象类的非抽象类,必须重写所有的抽象方法

  3. 抽象方法只能定义在抽象类中,抽象类不能实例化

    特性虚方法(Virtual Method)抽象方法(Abstract Method)
    定义方式使用 virtual 关键字定义,基类可以提供默认实现使用 abstract 关键字定义,无默认实现
    实现情况可以有默认实现,子类可以选择重写没有实现,必须由子类重写
    类类型可以定义在普通类或抽象类中只能定义在抽象类中
    子类行为子类可以重写,也可以不重写子类必须重写该方法
    实例化可以直接实例化基类,调用基类方法实现抽象类不能直接实例化

我们可以在静态类中使用“this”吗?

不。“this”不能与静态类一起使用,因为我们只能在静态类中使用静态变量和静态方法。

常量和只读变量有什么区别?

特性常量只读变量
赋值时机定义时赋值可以在声明时赋值,也可以在构造函数中赋值
访问权限是隐式 static 的没有实现,必须由子类重写
类型仅支持内置类型和枚举类型可以是任意类型,包括引用类型

stringStringBuilder 的区别

特性stringStringBuilder
可变性不可变(每次修改都会生成新字符串)可变(在原对象基础上修改)
性能适合少量字符串操作,频繁操作时性能较差适合频繁字符串修改,性能较优
内存开销每次修改都会分配新内存修改时不会分配新内存,内存使用更高效
适用场景少量的字符串拼接、简单的字符串操作频繁的字符串拼接、大量字符串修改
方法支持提供了丰富的字符串操作方法提供用于高效字符串拼接和修改的方法

解释“continue”和“break”语句

continue是跳出当前这一次循环,break是终止当前循环

什么是密封类

在 C# 中,密封类(sealed class) 是一种不能被继承的类。它通过使用 sealed 关键字声明,表示该类不能作为基类,也就是说,其他类不能从它派生子类。

请解释“using”语句

关键字“using”用于定义该 using 语句块中使用的资源的范围。一旦代码块完成执行,在 using 代码块中使用的所有资源都会被释放。

int?和int有什么区别

  • int ?为可空类型,默认值可以是 null
  • int 默认值是 0
  • int? 是通过 int 装箱为引用类型实现

C#中参数传递 ref 与 out 的区别?

ref 指定的参数在函数调用时必须先初始化,而 out 不用

ref方法内不需要强制重新赋值,out必须赋值

注意:string 作为特殊的引用类型,其操作是与值类型看齐的,若要将方法内对形参赋值后的结果传递出来,需要加上ref 或 out 关键字。

简述private、protected、public、internal修饰符的访问权限

  • private:私有成员,在类的内部可以访问
  • protected:保护成员,在该类的内部和继承类中可以访问
  • public:公共成员,完全公开没有访问限制
  • internal:在同一程序集中可以访问

C#中的委托是什么?事件是不是一种委托

  • 委托是一个类型,类似于C/C++中的函数指针,但比函数指针更安全和灵活。委托可以保存对一个或多个方法的引用,并允许在稍后调用这些方法。
  • 一个委托可以指向多个方法,这种功能称为多播委托。
  • 事件是一种特殊的委托,用于通知订阅者某个动作已经发生。事件本质上是委托的一个封装,通常用于发布-订阅模式。事件只能在类的内部触发,而不能从外部调用,因此提供了一种安全的机制来触发回调。

请使用编程实现一个冒泡排序

csharp
int[] array = new int[] {1,2,3,4};
for (int i=0;i<array.Length -1 ; i++){
  for (int j=i+1;j< array.Length ; j++){
    if (array[j]< array[i]){
    int temp = array[i];
     array[i]= array[j];
     array[j]=temp ;}
  } 
}

CTS、CLS、CLR分别作何解释

  • CTS、CLS 和 CLR 是 .NET 框架的核心概念,它们定义了 .NET 平台上语言互操作性、类型系统和运行时环境的基本原则
  1. CTS(Common Type System,通用类型系统)
    • 定义了 .NET 运行时支持的所有数据类型,确保跨语言的类型兼容性
  2. CLS(Common Language Specification,通用语言规范)
    • 定义了一组所有 .NET 语言必须遵循的规则,确保不同语言之间的互操作性。
  3. CLR(Common Language Runtime,通用语言运行时)
    • .NET 代码的执行环境,负责内存管理、代码执行、安全性、异常处理等基本功能,是 .NET 平台的核心。

什么是拆箱和装箱

  • 装箱:将值类型转换为引用类型的过程
  • 拆箱:将引用类型转换回值类型的过程
  • 性能考虑:频繁的装箱和拆箱操作会带来性能开销,建议通过使用泛型等方式来减少这种操作

c#中string str=null和string str=""尽量用文字或图像说明其中的区别

  • null:表示字符串对象没有指向任何对象,及没有被分配内存空间,对其进行操作会抛出NullReferenceException异常,因为它并不指向实际的字符串对象。
  • "":表示字符串被赋值为了空字符串,分配了内存空间,可以对其进行相应的操作

请详述在dotnet中类class和结构struct的异同

1.值类型和引用类型

  • 结构是值类型,分配在栈中,将结构的实例传递给方法或者赋值给另一个变量时,将复制整个结构的内容
  • struct是引用类型,分配在堆中,将类的实例传递给方法或者赋值给另一个变量时,实际上时传递的内存地址

2.继承和多态性

  • 结构不能继承:结构不能继承其他结构,也不能被其他结构继承
  • 类支持继承:类支持继承和多态性,可以通过派生类来扩展现有类的功能

3.默认构造函数

  • 结构不能有无参的构造函数

  • 类可以有无参的构造函数,如果没有构造函数,会默认提供一个无参的构造函数

4.可空性

  • 结构体是值类型不能直接设置为null,null是引用类型的默认值,如果需要,可以使用 Nullable<T>或T?的可空类型
  • 类默认为null

枚举的作用是什么

  • 枚举是一组命名整型的常量,是值类型,使用enum关键字声明
  • 通常用于表示有限的、固定的值集合
  • 作用:
    1. 提升代码的可读性:通过具名常量,使代码更清晰
    2. 增强代码的安全性:限制变量的有效范围
    3. 简化维护:集中管理常量集合,减少维护成本
    4. 类型检查:编译时确保类型安全,防止非法值的使用

保存数据的方法

  1. 文本保存(用于保存简单的文本数据)

    csharp
    //写入文本文件
    File.WriteAllText("data.txt","保存的文本数据");
    //读取文本文件
    string content = File.ReadAllText("data.txt");
  2. 二进制文件保存(适用于保存图像、音频等非文本数据)

csharp
// 写入二进制文件
byte[] data = new byte[] { 0x00, 0xFF, 0xAB };
File.WriteAllBytes("data.bin", data);

// 读取二进制文件
byte[] readData = File.ReadAllBytes("data.bin");
  1. XML文件保存
csharp
//创建
//实例化xml对象      
XmlDocument xmlDocument = new XmlDocument();
//设置第一行数据       
XmlDeclaration xmlDeclaration =xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);
//将第一行数据添加       
xmlDocument.AppendChild(xmlDeclaration);
//创建xml文件根节点       
XmlElement root = xmlDocument.CreateElement("root");
//将根节点添加       
xmlDocument.AppendChild(root);
//保存数据
xmlDocument.Save("file.xml");

//读取文件
     public static XmlNodeList LoadFileList(string path) {
       //实例化xml文件对象 
       XmlDocument xmlDocument = new XmlDocument();
       //根据文件路径加载xml文件  
       xmlDocument.Load(path);
       //获取xml文件根节点  
       XmlElement root = xmlDocument.DocumentElement;
       //返回xml文件根节点的字节点 
       return root.ChildNodes;
     }
  1. 数据库保存 (略)
  2. 配置文件保存
    • config 文件常用于保存应用程序的配置信息,通常在 ASP.NET 或桌面应用程序中使用

c#多线程经常访问同一个资源可能造成什么问题

  1. 竞争条件

    • 问题:多个线程同时对共享资源进行读写操作,没有同步机制的保护,每个线程操作可能会互相覆盖,导致最终数据不准确
    • 解决:使用 lock 关键字保护临界区,确保同一时刻只有一个线程能够访问共享资源。
  2. 死锁

    • 问题:死锁发生在两个或多个线程相互等待对方释放资源,导致程序卡住,无法继续执行。例如,线程A持有资源1,等待资源2,而线程B持有资源2,等待资源1。这种情况会导致两个线程永久地阻塞。
    • 解决:互斥量(Mutex)**,与 lock 类似,但 Mutex 可以用于跨进程同步,确保不同进程间的资源访问是互斥的。

3.资源争用:

  • 问题: 资源争用发生在多个线程尝试同时访问某个资源,导致系统性能下降。常见的资源争用包括多个线程同时读写同一个文件、数据库记录、内存块等。

    由于多个线程争夺同一个资源,系统必须排队处理这些请求,导致处理效率降低。如果争用严重,可能会导致系统响应时间变长甚至停滞。

  • 解决:信号量(Semaphore):限制对共享资源的并发访问数量。例如,允许最多三个线程同时访问某个资源。

4.饥饿

  • 问题:饥饿问题发生在某些线程由于系统调度策略或资源分配问题,长期得不到执行机会,导致其无法完成工作。饥饿的一个常见例子是高优先级线程频繁占用资源,导致低优先级线程一直无法获取资源
  • 解决:读写锁(ReaderWriterLockSlim):用于解决读写操作之间的冲突,允许多个线程同时读取数据,但写操作需要独占锁。
  1. 活锁(Livelock)
  • 问题:活锁和死锁类似,但有所不同。活锁是指线程并没有被真正阻塞,而是不断地重复尝试某个操作(通常是为了避开死锁),但总是失败,导致程序无法继续执行。尽管线程仍在运行,但却无法取得进展。

  • 线程安全集合(Thread-Safe Collections):使用 .NET 提供的线程安全集合类(如 ConcurrentDictionary, BlockingCollection)来管理共享数据,这些集合内部已经处理了线程同步问题。

  1. 数据不一致性

    • 在没有适当同步的情况下,多个线程同时读取和修改共享数据会导致数据不一致。例如,多个线程对同一个变量进行操作时,由于每个操作可能由多个步骤组成,因此在某个线程操作尚未完成时,其他线程可能读取到了错误的中间状态。

简单说明线程与进程的区别

进程:是一个正在执行的程序的实例,就是在内存中运行的应用程序,每个进程都有自己独立的内存空间,进程与进程之间无法访问彼此的资源,多个进程可以并发执行,进程可以有多个线程,一个进程崩溃不会影响其他进程

线程:进程内的执行单位,多个线程可以共享进程的资源,一个线程崩溃可能导致整个进程崩溃

  • 线程的创建和切换开销较小,通信方便,但是要注意线程同步问题,进程隔离性更好,但是资源占用比较高
  • 进程可以包含多个线程,进程负责管理内存、文件、网络连接等资源,线程负责实际的任务执行

简单说明单线程和多线程的区别

  1. 执行模式

    • 单线程:在单线程模式下,程序只有一个执行线程,所有任务都必须按顺序执行。这意味着一个任务必须完成之后,才能开始执行下一个任务。单线程程序无法同时处理多个任务
    • 多线程:在多线程模式下,程序可以同时创建多个线程,每个线程可以并发执行不同的任务。这种并发执行方式允许程序在相同的时间段内处理多个任务,提高效率。
  2. 并发性

    • 单线程:由于只有一个线程,所以没有并发性。程序在处理耗时操作(如文件I/O、网络请求等)时,可能会卡住,导致整个程序暂停,直到该操作完成。
    • 多线程:多线程程序通过并发执行多个任务,提升了程序的响应能力。例如,在GUI应用中,主线程可以负责用户界面渲染,另一个线程处理后台任务,这样即使后台任务较慢,界面也不会被冻结。
  3. 资源利用率

    • 单线程程序只能利用一个CPU核心,无法充分利用多核CPU的性能优势。如果有多个处理器核心,单线程程序只能使用其中的一个,限制了计算能力。
    • 多线程程序可以充分利用多核处理器的优势。不同的线程可以分配到不同的处理器核心上执行,从而提升并行处理能力,提高资源利用率和执行效率。

c#内存泄漏

  • 通常指的是程序在运行过程中无法正确释放已分配的内存,导致内存占用持续增加,最终可能导致系统内存不足

常见原因

  1. 事件处理器未解除订阅

    • 在C#中,如果对象订阅了某个事件,而事件源对象的生命周期长于订阅者对象,那么即使订阅者对象不再需要,仍然会因为事件源对它的引用而无法被垃圾回收。除非显式地解除订阅,否则订阅者对象将会一直保留在内存中,导致内存泄漏。
    • 解决:在对象销毁之前,确保解除所有事件订阅,或者使用弱事件模式来避免事件处理器导致的内存泄漏。
  2. 未释放的非托资源

    • C#中的托管对象由垃圾回收器自动管理,但对于非托管资源(如文件句柄、数据库连接、网络套接字、GDI+对象等),垃圾回收器无法直接处理。必须手动释放这些资源,否则它们将一直占用内存,导致内存泄漏。
    • 解决:解决方法是实现 IDisposable 接口,并在 Dispose 方法中释放非托管资源。
csharp
public class MyResource : IDisposable
{
    private IntPtr _unmanagedResource;

    public MyResource()
    {
        // 分配非托管资源
    }

    public void Dispose()
    {
        // 释放非托管资源
        if (_unmanagedResource != IntPtr.Zero)
        {
            // 调用操作系统函数释放资源
            _unmanagedResource = IntPtr.Zero;
        }
        GC.SuppressFinalize(this);
    }

    ~MyResource()
    {
        Dispose();
    }
}
  1. 静态变量持有对象引用

    • 静态变量的生命周期与应用程序的生命周期一致,因此如果静态变量持有某个对象的引用,那么该对象将无法被垃圾回收,从而导致内存泄漏。
    • 解决:解决方法是谨慎使用静态变量,确保在不需要时手动清除引用。
  2. 长生命周期对象对短生命周期对象的引用

    • 如果一个长生命周期的对象(如单例或全局对象)持有对短生命周期对象的引用,那么短生命周期对象将无法被GC回收,导致内存泄漏。一个典型的例子是缓存数据的全局字典。
    • 解决:是在对象不再需要时及时移除引用,或者使用弱引用(WeakReference)避免对象被长时间持有。
  3. 循环引用

    • 循环引用在托管环境下通常不会导致内存泄漏,因为垃圾回收器可以检测并清理循环引用。但在某些复杂场景中,例如两个对象之间相互持有非托管资源或事件订阅,这样的循环可能会导致内存泄漏。
  4. Timer 和后台线程

    • 如果使用 System.Timers.Timer 或 System.Threading.Timer,并且没有正确停止或释放计时器,它将继续引用目标对象,导致目标对象无法被垃圾回收。
    • 解决:是在不需要计时器时显式调用 Dispose 方法

SDK

SDK,即 Software Development kit 的缩写,译作软件开发工具包。.软件开发工具包是一个覆盖面相当广泛的名词,你甚至可以这么理解:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做 SDK。

硬件选型面试题

相机选型

  1. 分辨率

    分辨率决定了相机捕捉到图像的细节程度,高分辨率相机会生成更多的像素数据,适合需要精细检测应用,但同时,图像处理的负担也大

  2. 帧率

    帧率(FPS, Frames Per Second)指相机每秒能够捕捉的图像帧数。如果你的应用需要捕捉高速运动物体,比如生产线上的检测,较高的帧率是必要的。

  3. 传感器类型

    CCD(电荷耦合器件)和 CMOS(互补金属氧化物半导体)是两种常见的传感器类型。CCD 通常具有更好的图像质量和动态范围,适合要求高精度的应用。CMOS 通常速度更快,功耗更低,适合高速应用。

  4. 光谱范围

    可见光相机适用于普通成像。如果需要检测不可见光波段,比如红外或紫外,则需要选择相应的光谱相机

  5. 接口类型

    常见的接口有 USB、GigE、Camera Link、CoaXPress 等。接口的选择取决于你的传输带宽需求、传输距离以及系统集成的便捷性。

  6. 触发模式

    对于需要精准控制的应用,硬件触发模式可能比软件触发更为精确,能够与其他设备实现更好的同步。

  7. 相机尺寸

​ 相机的尺寸重量需要与机器设备空间相匹配,特别是在空间有限的工业环境中。

  1. 软件支持

    检查相机是否有良好的SDK(软件开发工具包)和驱动,并支持你使用的操作系统和开发环境。相机厂商提供的图像处理工具也可能是选择的一个重要考虑因素

  2. 价格与服务

    根据预算选择合适的相机

  3. 环境要求

    如果相机在苛刻的环境下工作,比如高温,低温,湿度较大或有震动的环境,则需要相应的防护等级

远心镜头的计算方式

  • 光学放大倍数 = cdd靶面型号尺寸(V或者H)/视场尺寸(V或者H)
  • 系统放大倍率 = 芯片短边/视野短边 = 7.452mm/25mm = 0.29808

一些选型的公式

  • 焦距 f =WD * 靶面尺寸(H or V) / FOV(H or V)
    • 焦距越小,景深越大,畸变越大,见晕现象越严重,使像差边缘的照度降低
  • 视场FOV(H or V) = WD * 靶面尺寸(H or V) / 焦距f
  • 视场FOV(H or V) = 靶面尺寸(H or V) / 光学倍率
  • 工作距离WD = f(焦距) / (靶面尺寸/FOV(H or V))
  • (焦距/靶面尺寸*视场大小) = 工作距离
  • 光学倍率 = 靶面尺寸(H or V) /FOV(H or V)
  • 分辨率 = 视野(Field of View) / 像素(Pixel)
  • 像素精度 = 分辨率

靶面尺寸

  • 1英寸 —— 靶面尺寸宽为12.8mm * 高9.6mm
  • 1.1英寸 —— 靶面尺寸宽为12mm * 高12mm
  • 4/3英寸 —— 靶面尺寸宽为18.5mm * 高13.5mm
  • 1/4英寸 —— 靶面尺寸宽为2.4mm * 高3.2mm
  • 1/3.6英寸 —— 靶面尺寸宽为4mm * 高3mm
  • 1/3.2英寸 —— 靶面尺寸宽为4.54mm * 高3.42mm
  • 1/3英寸 —— 靶面尺寸宽为4.8mm * 高3.6mm
  • 1/2.5英寸 —— 靶面尺寸宽为5.76mm * 高4.29mm
  • 1/2.3英寸 —— 靶面尺寸宽为6.16mm * 高4.62mm
  • 1/2英寸 —— 靶面尺寸宽为6.4mm * 高4.8mm
  • 1/1.8英寸 —— 靶面尺寸宽为7.18mm * 高5.32mm
  • 1/1.7英寸 —— 靶面尺寸宽为7.6mm * 高5.7mm
  • 2/3英寸 —— 靶面尺寸宽8.8mm * 高6.6mm

曝光和增益一般有什么作用

曝光时间: 快门速度,简单来讲就是按下快门的时间,时间越长,光子到CCD\CMOS表面的光子总和越多,采集的图像越亮,如果曝光过度,则照片过亮,失去图像细节,如果曝光不足,则图像越暗,同样会失去图像细节,虽然曝光时间过长一点图像质量会好一些,但是不能无限长,因为曝光过程中,噪点也在增加

增益: 经过双采样之后的模拟信号的放大增益,但是对图像信号放大的过程同时也会放大噪声信号

​ 曝光和增益是直接控制传感器(CDD/CMOS)上读出的数据,是要优先调节的,以调节曝光时间为主,在不过爆的前提下,增加曝光时间可以增加信噪比,使图像更加清晰,当然对于很弱的信号,曝光也不能无限增加,因为随着曝光时间的增加噪音也会累积,曝光补偿就是增加曝光拍摄时的曝光量

​ 增益一般只是在信号弱,但不想增加曝光时间的情况下使用,一般相机增益都产生很大的噪音,工业相机在不同增益时图像的成像质量不一样,增益越小,噪点越少,增益越大,噪点越多,特别是在暗处,数码相机的ISO就是这里说的增益,增大ISO,是增加感光器件对光的灵敏度。高感光度对低光照灵敏,同时也对噪杂信号也灵敏,信噪比小,所以高感光度噪点也多(可以利用图片软件的降噪功能减轻或去除)

​ 调节亮度增益说白了就是改变ISO,改变CMOS传感器的感光性能,但是会影响到画质,调节曝光简单来将就是按下快门的时间,时间越长,图片越亮

什么是物距

  • 指被拍摄物体到凸透镜之间的距离,影响到成像的大小,清晰度,景深,通过调整物距和对焦,可以优化机器视觉或摄影系统中的图像质量

红色的背景,白色的字体,该选用什么光源

绿色光源

如果要将目标打成白色需要选用同类色,如果要目标打成黑色,需要选用互补色

  1. 如果想变暗的特征是红色则使用绿光
  2. 使用绿光能使绿色特征呈现的更亮

普通镜头和远心镜头的区别

普通镜头:

1. 畸变大(透视失真):比如,当拍摄一个立方体时,普通镜头的透视效果会使靠近镜头的一面看起来比远离镜头的一面大。
2. 物体的大小会随物距的变化而变化
3. 镜头解析度不高

远心镜头:

  1. 放大倍数恒定

  2. 不随景深的变化而变化

  3. 无视差(无论物体离镜头远或者近物体的尺寸在图像中都保持一致)

  4. 低失真,畸变小

了解景深 描述一下景深

  • 图像中可以被清晰聚焦的前景和背景之间的距离

  • 景深是在聚焦完成后,焦点前后的范围所呈现的清晰图像的距离,这一前一后的范围叫做景深

  • 镜头焦距越小,景深越大

  • 物距越大,景深越大

  • 光圈越小,景深越大

相机接口

F型、C型、CS型

  • F接口一般适用于焦距大于25mm的镜头
  • C与CS接口的区别在于镜头与摄像机接触面至镜头焦平面的距离不同,C型接口此距离为17.5mm,CS型接口此距离为12.5mm,C接口镜头使用5mm的c/cs转接环可以安装在CS型接口的摄像机上,反之则不行。

视场(Field of View 即 FOV)

  • 指观测物体的可视范围,也就是充满相机采集芯片的物体部分

工作距离(Working Distance 即WD)

  • 指镜头前部到受检验物体的距离,即清晰成像的表面距离

分辨率

  • 图像系统可以检测受检验物体上最小可分辨特征尺寸,在多数情况下,视野越小分辨率越好

失真(distortion)

  • 又称畸变,指被摄物平面内的主轴外直线,经光学系统成像后变为曲线,则此光学系统的成像误差称为畸变

远心镜头

  • 为纠正传统工业镜头视差而设计,它可以在一定物距范围内,使得图像放大倍率不会变化,其本质是普通镜头与小孔成像原理的相结合

VisionPro

模版匹配里面的算法都有什么?分别有什么用

  • PatMax 涉及的点数多,精度比较高,速度稍慢,定位的精度可以为1/40像素
  • PatQuick 算法速度快
  • PatQuick 与PatMax算法 处于两者中间
  • PatFlex算法 比较适合于畸变的情况

visionPro中掩模和建模的区别

掩模

  • 作用:遮掩不必要的像素,消除干扰
  • 使用场景:当只需要边缘轮廓,忽略内部细节时候使用

建模:

  • 作用:手动创建一个需要的轮廓


    通过数学或几何模型来描述或表示图像中的特定对象或形状。建模的目标是识别、定位和测量图像中的物体,甚至在噪声或部分遮挡的情况下也能实现。

总结

  • 掩膜用于筛选和排除不相关区域,建模则是为了识别和定位感兴趣的对象
  • 掩膜是一种预处理技术,主要用于图像的初步处理;建模是一种高层次的分析技术,涉及到模式识别和对象定位。
  • 掩膜通常基于二值图像,而建模涉及到复杂的数学和几何算法。

模版匹配颗粒度是什么

可以通过修改粗糙和精细的颗粒度,修改粗糙和精细特征的表现情况

颗粒度变大,选取的特征会变少

本质上颗粒度越大,穿越的像素点就多,包围的轮廓就会变得粗糙

一般选择默认

弹性

弹性参数:当实例和当前模板有一定出入的时候(弹性形变),可以进行适当修改

  • 弹性匹配是一种灵活的模板匹配方法,能够处理图像中的变形、缩放、旋转等变化。它在需要处理复杂和变形对象的场景中具有重要意义,尽管其计算复杂度较高,但可以显著提高匹配算法的鲁棒性和适用性。

边缘阈值

低于边缘阈值的会当作物件的背景,大于阈值的才会视作物件的轮廓(边缘对比度)

如果设置一个过小的阈值会产生过多的干扰

设置一个过大的阈值,将会造成边缘轮廓损失


边缘检测的核心是找到图像中亮度或颜色发生剧烈变化的区域,这些变化通常代表物体的边界。边缘阈值的作用是设置一个标准,只有当像素之间的亮度或颜色差异大于这个阈值时,才将其标记为边缘。

  • 高阈值:如果设置的边缘阈值较高,算法会仅检测出图像中最强烈的边缘,忽略细小或弱的边缘。这适合用于噪声较多的图像中,以避免误检。
  • 低阈值:如果设置的阈值较低,算法会检测出更多的边缘,包括一些较弱或细小的边缘。然而,这也可能导致噪声或微小的图像变化被误认为是边缘。

极性

极性(Polarity) 指的是物体边缘灰度变化的方向,也就是从明到暗或从暗到明的转换(从暗到亮是正极性,反之是负极性)

接受阈值

结果高于得分接受,低于得分抛弃

粒度限制(和创建模板是的参数基本一致)

粒度限制通常指处理过程中对细节或特征的最小尺度限制,即算法或硬件能够有效区分或处理的最小颗粒大小。较小的粒度限制意味着系统能够处理更多的细节信息,而较大的粒度限制则意味着系统只关注较大的整体特征。

对比度阈值(背景和工件的切割对比度)

对比度阈值用于设定像素之间亮度差异的最小值。如果像素之间的亮度差异(对比度)低于该阈值,则系统会忽略这些像素的变化,认为它们不构成有效的特征或边缘;如果亮度差异超过阈值,则会被认为是图像中的重要信息

visionpro中找线工具找圆工具的对比度阈值怎么调

  • 对比度阈值是用来区分边缘与背景的数值。VisionPro通过图像灰度值的变化来找到边缘,对比度阈值决定了灰度值变化的敏感度。如果对比度阈值过高,可能导致遗漏某些边缘;如果过低,则可能引入噪声或干扰。
    通过查看背景和边缘的像素差调试相应的大小

c#中通过哪个方法加载VPP

CogSerillizer.LoadObjectFromFile(_camPath)

用自己的语言描述一下PMA,讲述一下模板匹配的输出结果?

是机器视觉中常用的算法之一,主要用于识别图像中的特定模板。它通过在图像中搜索与给定模板相匹配的区域,来定位目标物体。PMA 不依赖于图像的颜色或纹理,而是通过比较图像像素之间的相似性,找到与模板最接近的匹配。

  1. 匹配度:即匹配区域与模板的相似度,一般用百分比或相似度分数表示。匹配度越高,表示该区域与模板越相似。

  2. 匹配位置:匹配区域在图像中的具体位置,通常用坐标(如左上角点的坐标)来表示。

  3. 匹配区域大小:匹配区域的大小,可以反映目标物体在图像中的尺度。

  4. 旋转角度(如果支持旋转匹配):有些高级的模板匹配算法可以检测目标物体的旋转角度,因此输出结果还可能包含该角度信息

打光方式相关问题

如果想抓拍运动的物体选用什么相机和光源比较好,还是说应该尽量把运动的物体转为静止检测

  1. 高帧率面阵飞拍
  2. 用线扫相机和线光源搭配使用

  • 于高精度检测:如果要求非常高的精度(如微米级别的检测),并且物体的运动速度较快,建议将物体转为静止检测,这样可以确保图像的清晰度和稳定性。
  • 对于快速生产线检测:如果生产线速度较快,并且对检测精度的要求不是极端苛刻,使用高速相机、全局快门相机配合脉冲光源进行运动检测是更为高效的选择。

要测的缺陷有划痕,凹坑,粗糙度,壳体有反光,不知哪种光源好,反光挺厉害的,也不知道哪种光路合适

  • 正常情况下金属外壳是一个平面,没有弧度,选择平行同轴光效果比较好,如果外壳是有弧度的话,选择低角度的光源好一些,最好加上偏振片

  1. 检测划痕:可以使用偏振光源结合低角度环形光源,这样可以突出表面细节,同时抑制反光。暗场照明也可以很好地突出划痕等表面缺陷。
  2. 检测凹坑:同轴光源结合漫射光源是较好的选择,可以使表面凹陷更容易显现,而光滑的反光表面反射会被抑制。
  3. 检测粗糙度:建议使用漫射圆顶光源,这种光源可以均匀照射表面,减少反光并突出表面粗糙度。

光源

  1. 偏振光源(Polarized Light):

    • 特点:通过偏振滤光片,可以消除由于反射光造成的眩光,从而获得更清晰的表面图像。配合偏振滤镜,相机也可以减少反射光的干扰。
    • 应用:对于有光泽或高反光表面的划痕、凹坑检测非常有效。能够减少反光并突出细微的表面缺陷。
  2. 同轴光源(Coaxial Light):

    • 特点:同轴光源从相机的光轴方向照射,光线垂直打在物体表面,适合高反光表面。因为光线会沿着物体表面反射回相机,均匀照射可以减少反射造成的亮斑。
    • 应用:适合检测平面或光滑反光表面上的微小凹坑和划痕。光源可以有效减少反射光,并帮助突出表面细节。
  3. 漫射光源(Diffuse Dome Light 或 平面漫射光源):

    • 特点:漫射光源通过均匀分布的光照,避免产生强烈的高光反射,形成均匀的照明效果。特别是圆顶光源(Dome Light)可以从多个角度均匀照射物体,消除大部分反射。
    • 应用:适合在反光面上检测凹坑和表面粗糙度。由于光线从各个角度照射,物体表面的反光会被大幅减少,适合处理不规则表面和弧形物体。
  4. 低角度环形光源(Low-Angle Ring Light):

    • 特点:光源以低角度照射,可以更好地突出物体表面的划痕和凹坑等缺陷,尤其是对于反光的边缘和表面细节有更好的表现。
    • 应用:适合检测表面划痕和细微凹陷,在具有反光的金属或抛光表面尤为有效。

光路

  1. 倾斜角度照射:

    • 将光源从一个特定的角度(而非垂直于物体)照射,避免正面反射光直接进入相机镜头。这种光路设计可以有效减少光线的强烈反射,从而突出表面缺陷,如划痕或凹坑。
  2. 暗场照明(Dark Field Illumination):

    • 采用暗场照明的方式,光源从较低角度照射,而相机则从相对较高的角度捕捉反射光。这种方式非常适合检测反光表面上的微小瑕疵,如划痕和表面粗糙度,瑕疵会在镜头中显示为高亮的区域,而光滑的反光面会显示为暗色区域。
  3. 多角度照射:

    • 使用多个光源从不同角度同时照射物体表面,特别是在壳体具有复杂表面时,可以通过多个光源的组合来减少强反光区域。多角度的光路设计可以确保即使一个角度有反光,其他角度也能捕捉到清晰的表面信息。

测量零件尺寸时,背光源和被测工件之间的距离多少为好

  • 一般的背光源越近越好,干扰越少,测量尺寸时建议用平行背光源,边缘受影响少

如何排除透明材质下的灰尘对找边的干扰,项目为找屏幕边缘,但是夹层中存在灰尘,会形成斑点,对找边有干扰,使用什么光源能够有效排除灰尘的反射干扰

  • 在没有金属封边的情况下,条光侧边打,然后在屏幕边缘产生比较亮的光条,距离边缘较远的灰尘没有影响,近距离的可能会产生亮斑,但不会太严重,一般不影响拟合效果

金属罐体如何打光,目前采用两个白色条光打光,效果不是很好,表面反光比较严重,针对这种金属曲面,如何打光才能获得比较好的效果

image-20240828113525512

  • 只想消除反光的话,有两种方法
    1. 两个条光上贴上偏振膜,镜头上装上偏振镜,偏振镜调到合适的角度即可
    2. 改变光源的位置,从左右打光改为上下打光。如果下方没位置就上面打光,光源角度要低(光源贴近样品)

什么光源穿透磨砂膜,检测产品上面要盖一层这种磨砂膜,不能保证完美贴合

  • x光 目前应用于电池模组的检测,比如小牛锂电池

在使用球积分(碗光)光源打光拍图的时候,有没有遇到过图像中间有黑斑的情况,如果遇到的话是怎么解决的

  • 球积分光源配合同轴光源,可以消除中间的阴影区域
  • 用标准的白板对相机进行颜色的标定,对阴影区域做亮度补偿,效果也是比较理想的

压焊在黄铜表面的焊点检测,用哪种光源合适

image-20240829092913001

  • 焊点位于金属垫片上,需要拍摄定位出四个焊点,判断焊点是否正常焊正,金属垫片为银白色,表面反光性强,且表面具有一定的凹陷,因此使用碗状光源,利用其多角度,全方位的慢射光打亮样品表面,去掉其表面凹陷干扰的同时,可以突出焊点,拍摄出的图像具有很高的对比度,但碗状光源中心具有一圆形开孔,会使拍摄的图像中心形成一个圆形的阴影区,因此我们在碗状光源上加装一个同轴光源,即可达到拍摄要求

红光与蓝光我了解的区别就是在波长上不同,但是在实际的运用中,都是根据效果在选择,它们根本的区别是什么

  • 波长,比如说拍手机上的摄像头,你想拍摄头表面的玻璃就用波长短反射强的蓝光,想拍里面就用波长长的红光
  • 颜色互补,比如拍摄红色色的物体,用红光拍摄出来就是亮的,用蓝光拍出来就是暗的,具体还是根据你想要的效果去选择搭配

图片红色方框区域内是肉眼可见的条形区域(由于本身颜色比较淡)在白色光源下为灰色或者拍不到其存在,这种情况该如何打光才能改善这种比较淡的颜色拍不出来的问题

image-20240829100947349

  • 答:蓝光或者绿光

image-20240829101108093

我们准备对如下图片所示的电子元件(包装在料袋内)进行机器视觉缺陷检测,料袋上的透明塑料膜造成的反光影响会比较大一些,类似这种的场景的光源如何选型比较合理

image-20240829101424273

  • 用红外光源低角度打光,这样的项目一般用带角度的环形光,不可垂直打光或高角度打光

需要检测泡罩包装药片的质量,缺陷种类包括:无药片,药片破碎,药片上存在杂质,铝板与泡罩热合不良等缺陷

image-20240829101736473

  • 使用偏振片


    1. 减少镜面反射
      • 在泡罩包装中,塑料泡罩和铝箔层都可能产生强烈的镜面反射。偏振光可以减少这种反射,从而让相机更清晰地看到泡罩内的药片状态。通过使用偏振片,可以消除由材料表面产生的高光点,使图像更加清晰,便于后续的图像处理。
    2. 增强对比度
      • 对于某些缺陷,如药片上的杂质或药片本身的颜色变化,偏振光可以帮助增强这些特征与背景之间的对比度,使得缺陷更容易被检测出来。
    3. 改善图像质量
      • 在某些情况下,偏振光可以改善图像的整体质量,减少不必要的光斑或阴影,使得图像更均匀,从而提高检测的准确性。
    4. 适应特定材料
      • 泡罩包装材料可能是半透明的,而偏振光可以更好地穿透这些材料,同时减少散射光的影响,使得相机能够更清楚地看到内部情况。

项目相关面试题

相机拍照时间一般是多少

100ms或者是200ms跟相机是多少万像素和帧率有关

1000w以内的都可以说用100ms

1000w以上的都可以说是150ms或200ms

视觉检测时间

100ms-500ms

看检测难度

简单点的计算坐标可以说100ms

复杂的缺陷检测可以说200-300ms

项目中用了几个相机

如果是测量类或者比较简单的项目 用两个相机,一个相机的CT不够,CT是多少,一小时4000,单个相机不够

引导项目,一般是两个到三个

如果是多种缺陷检测2-4个

不同的缺陷类型用不同的光源或者检测的位置略有不同

项目里面负责什么

只负责打光,写程序,写视觉算法,调机,或者全部都是自己完成

有没有调过机

调机经验

  • 相机连接不上是怎么解决的

    • 先检查指示灯状态看看是不是绿灯一般正常情况下指示灯正常都是绿的
    • 如果是红灯闪烁或者指示灯不亮,可能是相机与设备之间的连接存在问题
  • 测量不稳定是什么原因导致的

    • 首先检查是不是测量仪器本身的问题看看元器件是否老化和零部件损坏
    • 然后在检查是否是人为因素可能因为用户在使用测量仪器的时候操作不当导致的
    • 接着检查供电电压是否稳定 如果电源质量不稳定也会影响测量仪器的正常工作
    • 最后考虑一下环境因素 例如:电磁场干扰 或者温度和湿度的变化太大
  • 贴合不稳定是怎么解决的

    1. 视觉方面检查相机镜头,有没有锁紧,重新标定
  • 机构方面: 机台不水平,有晃动,吸料不稳,产品吸的不平,破真空异常

    • 首先我们要先检查并调整一下机台水平度,使用水平仪确保机台在各个方向上都处于水平状态
    • 然后处理机台晃动的问题 ,检查机台各个部件的螺丝是否紧固,特别是关键部位的固定螺丝
    • 接着优化吸料系统,我们要去检查吸料装置确保吸料装置(如:吸盘,真空泵等)处于良好的工作状态 ,调整吸料参数,根据产品的材质和形状调整吸力大小,吸附时间等
    • 如果吸的不平的话我们可以优化产品定位机构和调整,确保产品在吸附时能准确地定位在指定位置,避免发生偏移
    • 破真空异常 首先检查真空系统 检查真空系统的各个部件是否完好无损,接着调整真空的控制逻辑和参数设置
  • 来料方面: 产品本身误差大,例如尺寸公差±0.15,产品本身波动在0.2,导致贴合不稳定

日常负责的是什么?工作过程中遇到的问题是什么?如何解决的?

调试同上

如果可以独立做项目同下

有没有单独做过项目

简述流程

如果单独做过项目,尽量说是小项目,只有一台机,用了一个视觉一个电控一个售后

PM给到需求,根据产品的公差和大小确定相机

去现场打光测试,给报告方案

写程序,调机

打光一般用多长时间:

根据产品的需求不同和测量的尺寸多少不同用的时间不一样

如果尺寸测量,可以说半天到一天,然后作出数据报告

如果是外观检测,根据不同种类的缺陷,选用不同的光源组合,可能3-5天不能

项目周期是多久:一个月左右

做项目流程

  1. 拿到需求
  2. 根据公差带选择合适硬件
  3. 打光测试
  4. 出视觉方案
  5. 如果项目确定能做就和机构的沟通检测方案和相机的安装方式
  6. 和电控人员沟通通讯内容
  7. 写程序
  8. 现场调试

调试流程

  1. 尺寸测量机台

    • 调试视野,畸变矫正,GRR,相关性
  2. 机械手引导

    • 调试视野,示教拍摄点位,九点标定

    • 旋转中心,拿产品试贴最后做CPK等数据

  3. 缺陷检测

    • 收集不良品,优化视觉检测算法

如果做过引导项目

单相机引导

  • 贴合精度是多少 例:客户要求的精度是±0.2

  • 贴合完成后数据波动是多少 贴合完成后拍照检测 数据波动范围在±0.1

  • 如果问有没有做过更高精度的 可以回答说没有

  • 怎么标定的 九点标定

  • 怎么求旋转中心

  • cpk能做到多少1.33

如果简历中有引导项目 请描述下你的引导流程

说下几个相机,怎么做的标定和旋转中心即可,比着上面的问题挑几个回答

  1. 调整相机的位置,确定相机安装高度和视野
  2. 调整机械手拍照位置
  3. 做九点标定和旋转中心
  4. 拿样品测试贴合效果

引导项目中一般用什么标定

九点标定

九点标定法是基于什么实现的

用visionpro的CalibNpoint工具

相机知道的是像素坐标,机械手是空间坐标系,所以手眼标定(九点标定)就是得到像素坐标系和空间机械手坐标系的坐标转化关系。手眼标定作用:建立相机坐标系和机械手坐标系之间的关系,即给机械手装上眼睛,让它去哪就去哪

九点标定怎么做

机械手吸取产品或者标定块移动九个位置,相机分别拍九次照获取九个像素坐标,把九组机械手坐标对应的视觉坐标一起填入VisionPro和CalibNpointToNpointTool工具,运行校正获取标定结果

在引导项目中你是如何找旋转中心的

机械手三个角度,每一次拍摄一张照片,通过视觉工具抓取中心点坐标,三个点拟合一个圆,圆心就是旋转中心

如果问旋转多少度,可以说15度或者20度,角度过大产品就会超出视野

如何验证轴或机械手走位精度

机械手吸取产品重复移动到相机拍照点位

相机拍照抓取特征点坐标

查看坐标是否偏差过大

生产过程中贴合不稳定是什么原因

任何视觉项目检测中出现的问题都可以从三个维度分析

下面是引导的机台出问题的解决方案

  1. 产品本身有问题

    • 上面有脏污,破损导致视觉抓错;

      • 定期清理产品表面,确保无脏污,异物或破损
    • 产品本身容易变形导致视觉抓错

      • 材料选择:选用不易变形的材料或加强固定措施,减少变形带来的影响
  2. 机构有问题

    • 机台水平没打好
      • 校准设备:检查并调整机台水平,保证所有部件都在正确的水平线上工作
    • 机械手水平和贴合平面水平不一致
      • 同步调整:确保机械手和贴合平面的水平一致性,避免因位置偏差造成的贴合不准
    • 破真空异常,机械手完全贴合产品,往回移动的时候带动产品导致有误差
      • 气压检查:检查破真空系统是否正常工作,确保机械手在贴合产品后能平稳释放而不带动产品
    • 相机松动,没有锁紧
      • 确保相机牢固安装,放置松动影响视觉检测精度
  3. 视觉问题

    • 镜头螺丝没有锁紧导致聚焦不够清晰
      • 检查并紧固镜头螺丝,确保图像聚焦清晰
      • 重新做九点标定和旋转中心

3c行业

结合电脑、通讯、和消费性电子三大科技产品整合应用的资讯家电产业

有没有3c从业经验

如果有 做过哪些方面的项目

  1. 例如:泡棉贴合 公差±0.2 精度0.02

    • 视野是30mm*25mm 用了500w相机

    • 贴合的公差波动在±0.1左右

    • 做项目的过程中遇到的问题


      1. 环境光照变化:机器视觉系统对外界光线非常敏感,如果工作环境中的光照条件不稳定,可能会影响图像的质量,从而影响测量的准确性。
      2. 相机分辨率与焦距调整:为了实现高精度的检测,需要选择合适的相机分辨率,并且正确设置镜头的焦距,以确保能够清晰地捕捉到泡棉贴合区域的细节。
      3. 泡棉材质的不一致性:泡棉材料可能存在一定的厚度和密度差异,这会导致即使是在相同的加工条件下,不同的泡棉也会有不同的表现形式,从而影响贴合的一致性。
      4. 边缘检测与定位:泡棉的边缘可能不够清晰或存在细微的不规则,这对边缘检测算法提出了挑战。如果不能准确地检测到泡棉的位置,那么后续的贴合操作就会出现偏差。
      5. 贴合过程中的移动:在泡棉贴合过程中,任何微小的移动都可能导致最终位置的偏移。这要求控制系统必须具备很高的稳定性和响应速度。
      6. 软件算法优化:为了达到高精度的要求,可能需要定制化的图像处理算法来提高识别的准确性和鲁棒性。此外,还需要考虑算法的计算效率,以保证实时性。
      7. 温度和湿度的影响:温度和湿度的变化也会影响泡棉的物理特性(如膨胀或收缩),进而影响贴合精度。
      8. 机械部件的磨损:随着时间的推移,机械臂或其他运动部件的磨损可能会导致重复定位精度下降,这也是需要定期维护和校准的原因之一。
  2. 例如: 铁氧体尺寸测量

    • 测了10个数据 产品尺寸50mm*30mm 公差±0.1

    • 选用了**w像素相机 进行测量

    • 测量过程中遇到了什么问题

    • 怎么解决的


      可能遇到的问题

      1. 像素分辨率不足:如果相机的像素分辨率不足以分辨出0.1mm的公差范围,那么测量结果将不够精确。例如,如果使用的是一个低分辨率的相机,它可能无法提供足够的细节来准确测量尺寸。
      2. 照明不均匀:照明条件不均匀会导致某些区域的对比度降低,从而影响边缘检测的准确性,进而影响尺寸测量。
      3. 边缘检测困难:铁氧体的边缘可能不够清晰或者存在反光,这会使得边缘检测算法难以准确识别边界。
      4. 相机标定误差:如果没有正确标定相机,或者标定参数随时间发生漂移,这会导致测量结果不准确。
      5. 背景干扰:如果背景中有其他物体或者杂乱无章的图案,可能会影响图像处理算法的性能。
      6. 振动和运动模糊:如果测量过程中有轻微的振动或铁氧体移动,这会导致图像模糊,从而影响测量精度。

      解决方案:

      1. 选用高分辨率相机:确保相机的像素足够高,可以分辨出至少0.1mm的变化。例如,对于50mm×30mm的尺寸测量,可以选择具有较高像素的工业相机,并适当调整视场大小以确保足够的分辨率。
      2. 优化照明系统:使用均匀的背光或侧光照明,减少阴影和反射,提高边缘对比度。
      3. 高级边缘检测算法:使用更先进的边缘检测算法,如亚像素级别的边缘检测技术,以提高测量精度。
      4. 相机标定:在使用前进行精确的相机标定,并定期重新标定以保持测量准确性。
      5. 背景处理:通过软件算法去除背景干扰,比如使用背景减除技术或者固定背景模板进行图像分割。
      6. 抗振措施:确保测量平台稳固,必要时可增加减震装置,同时控制铁氧体的放置稳定性。
      7. 环境控制:尽量在一个稳定的环境中进行测量,控制温度和湿度的变化。
  3. UV胶水检测

    • 用UV光拍摄胶水 提取颜色,然后blob检测

视觉调试流程

例: 安装相机镜头、调试相机高度和视野、确定焦距、调整成像效果、相机标定、调试检测算法

能不能独立完成项目的程序编写

如果没有只是跟现场一起参与

  • 项目中遇到的问题,怎么解决的,结果同上调机经验
  • 项目周期是多久,可以说一个项目有复制线,20台设备,跟项目三个月或者半年

现在有个产品视野比较大,长度在200mm左右,精度要求比较高,我该怎么去测量

使用两个500w相机(满足精度要求),用带二维码的菲林片进行相机标定,把相机标定在同一空间就可以进行测量

如果不想用两个相机就想用一个节省成本

可以使用一个相机和一张大的菲林片,移动相机设置两个拍照位置拍照标定

如果再问回答不知道

做数据GRR相关性

什么是GRR,什么是相关性

GRR一般做到10%以内,相关同样


GGR是一个统计工具,用于评估测量系统的变异性。GRR 分析通常用来确定一个特定的测量过程是否足够精确以满足产品的公差要求。它通过分析不同操作者使用同一设备对相同部件进行多次测量的结果来衡量测量系统内的变异性

  • 重复性(Repeatability)指的是同一个操作者使用相同的设备对同一零件的同一特性进行多次测量时结果的一致性。这反映了测量过程中随机误差的影响。
  • 再现性(Reproducibility)则关注不同操作者之间使用相同的设备对同一零件进行测量时结果的一致性。这考虑了由于操作者差异导致的系统误差。

相关性(Correlation)是一个统计学概念,用来描述两个或多个变量之间的关系强度和方向。在机器视觉中,如果涉及到数据分析,相关性可能被用来表示图像特征或其他测量数据点之间的相互依赖性。例如,在检测过程中,一个特定的缺陷模式与生产条件之间的相关性可以帮助识别问题的根源。

机械手精度是多少

用的四轴机械手,一般是0.02mm. :即两条左右

接触的机械手品牌

爱普生、三菱、ABB、库卡、雅马哈等,可以百度进口的机械手品牌

公司用的什么通信

网口TCP通信、串口通信、profit(这个可以说和西门子通信用的s7.net)

公司视觉团队有多少人,几个研发

看情况回答,一般回答5-20人,研发就3-十几个

如果自己选择的是大公司,可以多说一些

测量圆珠笔直径

选背光,打轮廓出来

包装logo字体,有没有印反,用什么方式实现

模版匹配

检测划痕用什么光源

同轴光

  1. 环形光(Ring Light) - 环形光从多个角度均匀照射目标区域,有助于减少阴影并突出表面细节。这对于检测平坦表面上的划痕非常有效。
  2. 同轴光(Coaxial Light) - 同轴光是从镜头轴心方向发出的光,可以减少反射干扰,适用于检测高反光表面或透明材料上的划痕
  3. 条形光(Bar Light)或线性光(Linear Light) - 这种光源通常沿着一条直线分布,可以用于照亮较大的区域或特定的检测路径,对于长条形划痕检测很有帮助。

缺陷检测常用的打光类型

同轴+环光组合使用

  1. 环形光(Ring Light)
    • 用途:适用于平面或轻微曲面物体的检测,能够提供均匀的照明,减少阴影。
    • 适用缺陷:划痕、斑点、裂纹等。
  2. 同轴光(Coaxial Light)
    • 用途:减少镜面反射,适用于高光泽度或反光表面的检测。
    • 适用缺陷:微小划痕、指纹、灰尘颗粒等。
  3. 条形光/线性光(Bar Light / Linear Light)
    • 用途:适用于较大区域的照明,可以通过调整角度来强调某些特征。
    • 适用缺陷:长条状划痕、接缝不齐等。
  4. 背光(Backlighting)
    • 用途:从被测物体背后照亮,通常用于边缘检测或透明物体内部缺陷检测。
    • 适用缺陷:孔洞尺寸偏差、透明材料中的杂质或气泡等

你在上一家公司用到的相机和光源品牌都有哪些

相机:海康威视、康耐视、索尼、基恩士、巴斯勒

光源:松下、飞利浦、沃德普、东冠科技、欧普照明

如果在现场调试期间,发现现场成像效果不理想,应该怎么做

调整成像,检查曝光是否合理,镜头光圈大小、安装高度

  1. 检测光源

    • 确保选择了合适的光源,不同物体表面特性和检测需求可能需要不同的光源
    • 调整光源的亮度,避免过亮或过暗
    • 检测光源的位置,不同角度的光照可以改善某些细节的显现
  2. 相机参数调整

    • 曝光时间
    • 增益
    • 分辨率确保分辨率是否合理,高分辨率会增加处理时间,可能会影响实时性
  3. 镜头和焦距调整

    • 确定焦距距离
    • 确保相机正确对焦,以保证图像清晰度
  4. 机械装置检查

    • 相机与工件的相对位置是否匹配
    • 确保现场没有机械振动或者相机支架松动影响图像清晰
  5. 图像处理与算法

    • 在图像处理前进行适当的预处理操作
  6. 外部因素干扰

    • 环境光干扰
    • 尘埃或者污渍

接触过什么品牌的PLC

西门子、施耐德、三菱电机、AB、伦茨、绘川、台达、中控、信捷

  1. 西门子

    • 西门子是全球领先的自动化解决方案厂商,plc系列以稳定性和功能强大著称,适用于中大型自动化控制系统
  2. 施耐德电气

    • 市场占有率较高,特别是在能源管理、基础设施和工厂自动化等领域,具有高可靠性和良好的网络通信功能
  3. 三菱电机

    • 性价比高,易与编程,结构紧凑,广泛应用于中小型自动化控制场合,FX系列适合小型控制系统,Q系列适用于从小型到大型的控制系统

了解GRR和CPK?请描述一下

静态重复性:产品放置不动拍摄测量尺寸 ,反应了视觉算法精度有没有问题

动态重复性:产品取放拍摄测量尺寸,反应了设备的稳定性

测量重复性的意义:其目的在于可以根据测试的数据研判机台的硬件是否存在问题,定位是否足够准确,人物的编写是否合理,以及算法是否存在局限性,在拿到GR&R数据后,应当找出跳动最大的数据,追溯该笔数据所对应的点云以及其所在的位置,对其进行相应的分析,只有当确保自己的机台在测试相应数据时不会出现偏差,才能去与对应的的标准机进行对标 GRR一般做到10%以内

相关性的要求由客户给定,同时测量的次数,物料的片数,也严格按照客户要求进行,根据测量项来确定偏移量(offset)和线性的斜率(ratio),在针对偏移量进行补偿以后,测量值与真值所拟合的线性斜率越接近1,说明我们的机台与标定机结果越符合。

CPK:反应了设备过程是实际加工能力,CPK越好,贴合越稳定

可以回答之前做到1.33

补偿

例如:我们发送的机械手贴合坐标时100.20,50.30,90.00,然后机械手实际走到的位置是100.25,50.22,90.55,如果每次贴合基本都是这个偏差,这个是我们可以设定x方向补偿值offset+0.05,y方向补偿值offset=0.08,角度补偿值是offsetR+0.55,即后续所有的最终坐标都是x+offsetX,y+offsetY,r+offsetR

防呆

即预防措施,例如贴电池的时候,我们本来要拍正面计算长宽,但实际吸取到产品的时候我们拍到的是反面,这时候加一步预防措施,判断相机是否是正面,如果不是,就NG不再执行后续组装的操作

相机硬触发的三种接线方式

  • 可以用同一I/O信号同时触发相机和光源控制器;
  • 或者I/O触发相机,相机输出接控制器,触发光源控制器
  • 也可以,I/O信号触发控制器,控制器的输入接相机,触发相机

工业选型案例

案例分析:已知条件,工业相机型号已经选择好,具体参数:工业相机芯片尺寸为2/3,C接口,500万像素,视野是100*100mm工作距离:500mm

根据以上条件

镜头接口: 首先工业相机镜头要和工业相机接口一致,所以这里也选c接口 镜头大小:遵循镜头大小要大于相机的芯片大小,所以这里的镜头尺寸最少也要支持2/3 镜头分辨率:镜头的分辨率要高于相机的分辨率,所以选择500万像素以上; 焦距:500(WD)*8.8mm(靶面尺寸 H)/ 100(FOV) =44mm 镜头放大倍率:8.8(芯片水平长度)/100(视场) = 0.088

客户提供工件大小为 75 * 40mm,一次需要拍摄单个工件,选用500WOPT 相机(芯片尺寸5.7*4.3mm,分辨率 2592 * 1944),机构空间限制为镜头工作距离在 600-900mm之间,请问大概选择多大焦距的镜头?

为了选择合适的镜头焦距,我们需要考虑工件的尺寸、相机的芯片尺寸以及镜头的工作距离。这里,我们已知工件的大小为7540mm,相机的芯片尺寸为5.74.3mm,分辨率为2592*1944,以及镜头的工作距离在600-900mm之间。 首先,我们需要计算相机芯片上每个像素代表的实际尺寸,这通常被称为“像素尺寸”或“空间分辨率”。由于相机的分辨率为25921944,芯片尺寸为5.74.3mm,我们可以分别计算水平和垂直方向上的像素尺寸: 水平像素尺寸 = 5.7mm / 2592 ≈ 0.0022mm/pixel 垂直像素尺寸 = 4.3mm / 1944 ≈ 0.0022mm/pixel(这里为了简化计算,我们假设水平和垂直方向的像素尺寸相同,实际上可能略有差异) 接下来,我们需要考虑如何将工件完整地成像在相机的芯片上。由于工件的长边为75mm,我们需要选择一个焦距,使得在镜头的工作距离内,工件的长边能够覆盖相机的芯片长边。这里,我们可以使用简单的比例关系来估算焦距: 焦距 = (工作距离 × 芯片长边尺寸) / 工件长边尺寸 由于工作距离在600-900mm之间,我们可以选择一个中间值(如750mm)来进行估算,但请注意,这只是一个近似的起点,实际焦距可能需要根据镜头的具体性能进行调整。 焦距 ≈ (750mm × 5.7mm) / 75mm ≈ 57mm 然而,这个估算值可能并不完全准确,因为它忽略了镜头的其他特性(如畸变、场曲等)以及实际成像时的各种因素。因此,在实际应用中,我们应该根据镜头的具体规格表或咨询镜头制造商来选择合适的焦距。 此外,由于镜头的工作距离范围较宽(600-900mm),我们可能需要选择一个变焦镜头或至少两个定焦镜头来覆盖整个工作距离范围。如果只能选择一个镜头,并且需要在这个范围内都能获得清晰的图像,那么我们应该选择一个焦距稍长且能够在整个工作距离内保持良好成像质量的镜头。 综上所述,基于给定的信息和估算方法,我们可以初步选择一个焦距约为57mm的镜头作为起点,但具体选择还需要根据镜头的实际性能和应用需求进行调整。

在封闭的车间里,有日光灯照明导致图像明暗闪烁,请说明都有哪些方法可以解决问题;请尽可能多的列举出来。

在封闭车间内,日光灯照明导致的图像明暗闪烁问题,主要源于日光灯的频闪特性以及相机或摄像设备的曝光设置与灯光频率不匹配。为了解决这个问题,可以从以下几个方面入手:

  • 更换照明设备:
    使用无频闪的LED灯:LED灯通常具有更高的频率,且很多LED灯设计为无频闪,可以显著减少图像闪烁。

  • 调整日光灯类型:如果必须使用日光灯,可以选择高频电子镇流器日光灯,其频闪频率远高于传统日光灯,有助于减少闪烁现象。

  • 调整相机或摄像设备设置:

    • 调整快门速度:将相机的快门速度设置为与灯光频率相匹配或为其整数倍,可以减少因曝光时间与灯光闪烁周期不一致而导致的闪烁。

    • 启用防闪烁功能:许多现代相机和摄像机都配备了自动防闪烁功能,该功能可以自动检测并调整快门速度以匹配灯光频率。

    • 调整曝光模式:使用手动曝光模式,并仔细调整曝光参数,如ISO、光圈和快门速度,以获得更稳定的图像。

      使用滤镜或遮光罩:

    • 使用柔光罩或扩散板:这些设备可以分散光线,减少光线直接照射到相机镜头上产生的闪烁效应。

    • 安装偏振镜:虽然偏振镜主要用于减少反光,但在某些情况下,它也可能有助于减少因光线波动引起的图像闪烁。

    • 优化车间环境:

      • 增加照明设备数量:通过增加照明设备,可以减少每个灯具的负载,从而降低闪烁的可能性。

      • 均匀分布照明:确保车间内照明分布均匀,避免局部过亮或过暗,这有助于减少因光线不均引起的图像问题。

    • 使用图像处理软件:

      • 后期处理:在图像拍摄后,可以使用图像处理软件(如Photoshop)进行后期处理,通过调整亮度、对比度和色彩平衡等参数来减少闪烁现象。

      • 视频稳定技术:对于视频素材,可以使用视频编辑软件中的稳定技术来减少因光线闪烁导致的画面抖动。

    • 咨询专业人士:

      • 寻求照明专家建议:咨询照明领域的专家,了解如何根据车间具体情况选择合适的照明设备和布局。

      • 与相机制造商联系:如果问题持续存在,可以联系相机或摄像设备的制造商,了解是否有特定的设置或固件更新可以解决此问题。综上所述,解决封闭车间内日光灯照明导致的图像明暗闪烁问题,需要从多个方面入手,包括更换照明设备、调整相机设置、优化车间环境以及使用图像处理软件等。

深圳富士康面试1

1.自我介绍+工作经历?大学所学的专业

自我介绍

面试官你好我叫XXX,来自河南洛阳,拥有两年的机器视觉经验,目前专注于视觉检测领域。我热爱技术创新,尤其擅长使用VisionPro结合C#进行编程和调试,能够高效地解决实际问题。在大学期间,我主修电子信息工程技术,通过这一专业的学习,我对电子电路、信号处理以及计算机编程等领域有了全面的理解。工作之余,我喜欢打羽毛球,保持活力和健康。

工作经历

在过去的两年里,我一直从事机器视觉相关的工作,主要负责视觉检测系统的开发和调试。在项目中,我利用VisionPro进行图像处理,结合C#实现自动化检测流程,确保产品质量的稳定性和生产效率的提升。通过这些实践,我积累了丰富的项目经验,尤其在视觉算法的优化和系统集成方面,具备较强的解决问题的能力。

2.日常负责的是什么?工作过程中遇到的问题是什么?如何解决的?

  • 可以说负责机台调试,vpp修改、框架程序功能模块的修改
  • 硬件选型、打光出方案,写程序和视觉算法,调试流程一整套流程都会

3.调试的程序是ok的,下一步做检测吗?

比较宽泛,可以介绍自己做项目的流程

  • 比如测量的就是做相机畸变校正,调试写好的视觉算法程序,做数据GRR相关性等数据

  • 引导的就是做N点标定,旋转中心,调试贴合程序,做CPK等数据

  • 外观检测就是收集不良品,训练模型、优化模型以达到可以检测的水准

    如果问优化模型需要多久?

    回答:根据提供的不良品的种类和数量,大概在一至两周左右、如果没有这种不良品可以和客户沟通手动制造一些这种不良,或者先行生产有人工进行复判

4.之前检测的哪些地方,有哪些缺陷?

回答:

  1. 焊点检测 就是少锡、锡多、烧伤、这些用深度学习检测,锡高用3D检测,尽量不提虚焊

    如果非要提虚焊

    • 就说那种图像上呈现面积减小或图像上能呈现的可以检测,其他的没有特别好的办法,一般都有提前和客户沟通这种事情、不做虚焊检测
  2. 金属件 例如type-c头

    检测划伤、碰伤、脏污

  3. 手机中框

    划伤、碰伤、脏污、pad氧化异色

5.过检率?漏检率?

过检率在3%、尽量在5%以下、 漏检在0.2%以下

可以说过检和漏检也跟制程息息相关,有时候前面制程不良会导致产品有色差或者某些地方和之前不一样导致误判

6.如何将过检,漏点从28调整到0.1?漏检30片,如何处理才能做到0.1?

(问题不是特别清晰)

优化良率如下

深度学习训练模型优化模型

传统的就尽量优化视觉算法,或者观察是不是产品的问题,机构的问题---解决

7.比如说你做了这个东西,客户让你写分析方案能否写出来?(这个问的不是会不会写详细的报告)

回答:可以的,就把调机用的分析思路写出来

8.自己对电脑操作ok吗?

10.对于图像处理有没有试过一些图像分类这些东西

回答:有用深度学习,对图像进行分类

11.有没有了解过深度学习

  • 深度学习是一种基于人工神经网络的机器学习技术,尤其适用于处理大规模数据和复杂任务,如图像识别、语音处理和自然语言理解。它通过多层神经网络(通常包含数十到数百层)自动提取数据中的特征,能够实现比传统机器学习方法更高的精度。

  • 在机器视觉中,深度学习也被广泛应用于缺陷检测、分类、物体识别等任务。深度学习模型可以通过大量标注数据进行训练,自动学习到检测缺陷所需的特征,不再依赖手动设计的特征提取算法。

12.打样过程会记录问题点,怎么记录,设备出现问题处理的流程

会记录,记录到一个问题本上,查看问题出现在哪里,一步步排查问题点,从而解决问题

有视觉经验、深度学习的

接触哪种类型的相机

  • 面阵相机(Area Scan Camera):适合捕捉二维图像,通常用于需要获取整个场景或物体的图像检测任务,广泛应用于物体识别、尺寸测量等场景。
  • 线扫相机(Line Scan Camera):通过逐行扫描的方式获取图像,适合在传送带或高速移动的场景中使用,尤其适合检测长条状或连续移动的物体,如纺织品、纸张等。

相机线扫还是面阵

做检测分析报告,会做吗

  • FA是异常分析报告
  • 收集不良信息,分析问题,解决问题,并记录下来

缺陷检测过程?缺陷检测用几个相机检测?什么类型的相机?相机规

回答:

相机:海康890W和1200W相机,根据不同类型的缺陷种类可以说两到四个相机

比如说 划伤用一个、脏污用一个、IC检测用一个、或者就是产品用有金属有塑料,不同的类型需要增加相机

也可说CT要求高,用了四个相机,检测的内容都是相同的

深圳富士康面试2

1.自我介绍

2.项目经验

3.做过哪些项目

4.简历写的项目怎么检测怎么定位?定位前期准备工作做了什么

  • 视觉方面,就是相机N点标定,旋转中心,验证机械手运动点位的重复性

5.定位出现什么问题?你会怎么排除?

  1. 光照均匀
  2. 图像分辨率不够
  3. 图像噪声
  4. 目标特征不明显
  5. 相机校准不准
  6. 算法选择不当

6.尺寸你怎么选择

回答:指相机选型

7.毕业专业?对于计算机硬件了解吗?

8.做机器视觉家呢是自己做还是跟师傅做?

9.视觉相机自己配置过吗?

深圳富士康面试3

1.有哪些处理图像的工具

2.你在以前的公司工作内容是什么

3.机器视觉这份工作你做了多久

4.你都做了哪些项目

深圳富士康面试4

1.我看你计算机专业为什么要选择机器视觉这个行业

2.(公司位置在苏州)你为什么要想来到苏州工作呢

3.我看你有过实习经历,你为什么要离职,不选择继续干下去呢

4.说一下你的职业规划

5.说一下你的期望薪资

6.我看你家是在河南这边,可以接受出来工作吗

7.你之前独立带过项目吗

8.你们之前的公司对visionPro有等级评定吗?

  • 说没有就可以

9.请问你对visionPro了解到什么程度

常规的视觉检测和引导都没问题

  1. VisionPro基本功能

    • 视觉工具:VisionPro 提供了丰富的视觉工具库,包括图像预处理、模式匹配、边缘检测、测量工具等。用户可以通过这些工具构建复杂的视觉应用,如物体识别、对位、尺寸测量等。 • 图像处理算法:VisionPro 包含先进的图像处理算法,如基于灰度的模板匹配(PatMax),它可以用于准确定位物体,即使在不同的旋转、缩放或部分遮挡下,也能取得较高的识别精度。

  2. 编程与集成

    • C#集成:VisionPro 提供与C#的API接口,可以方便地将视觉功能集成到自定义的应用程序中。用户可以通过 CogJobManager 来管理视觉任务,使用 CogToolBlock 来运行和调试视觉工具。 • VPP文件的加载与操作:VisionPro的视觉工具配置可以保存为 .vpp 文件,通过 C# 编程加载这些文件,方便视觉系统的部署和调试。

  3. 高级应用

    • 多相机配置:VisionPro 支持多相机协同工作,能够从多个角度捕捉图像,应用于复杂的3D场景或全方位检测。 • 视觉检测任务:在实际的工业场景中,VisionPro 可以用于高速生产线的缺陷检测(如划痕、凹坑等),配合合适的光源和相机,可以处理反光、复杂纹理的物体。

  4. 视觉项目开发流程

    • 从图像采集、预处理、特征提取到缺陷检测的整个流程,VisionPro 都提供了相应的工具。用户可以通过拖拽式的开发环境搭建视觉检测流程,同时也可以在必要时编写脚本或使用API进行高级控制。

10.visionPro是在哪里学的

  • 如果不是应届生一般不会问

11.说一下项目的流程

深度学习

怎样理解深度学习

一种图像处理算法,通过训练模型,优化模型,最后导出视觉处理算法

深度学习有1-4步,2-3是核心,标注-缺陷分类(深度分级)-训练-测试

深度学习一般的几类功能

  1. 分割:(监督模式)

    • 判断图像中的哪些像素属于哪些图标,对图像中复杂缺陷进行分割,学习NG样本

      • 应用场景

        a . 视野中有很多目标物体,用定位模块进行定位

        b. 目标物体有角度、半径识别需求、用定位模块进行角度估计

        c. 任意形状目标高精度定位

  2. 非监督分割

    • 功能:用于NG样本不易得而OK样本易得的场景,通过学习OK样本识别并分割途中存在的缺陷

      • 应用场景

        a. 适用于背景一致性较好的场景,如铁丝网、布匹检测等

        b . 宏观缺陷检测(检测低频严重缺陷)

  3. 定位

    • 确定目标在图像中的位置
  4. 检测:定位目标并分类

  5. 分类:判断图像所属类别,一般搭配定位和分割使用

  6. OCR: 识别字符

AI可以解决传统算法解决不了的问题

传统算法对图像的灰度信息进行提取,对于边界不清晰,灰度值对比不明显的缺陷检测效果差,AI检测基于数据驱动进行特征提取,对成像的要求没有传统算法高,对形态、纹理、颜色的提取能力强。例如下方图像中,这几类缺陷在成像上边界不清晰,灰度值与周围差异较小,以及产品表面为曲面,导致亮度不一,传统算法几乎无法检测或者算法开发困难

image-20240904111252190

劣势:

AI精度不如传统算法高,不适合解决测量类的需求

对于定量的检测任务,AI检测精度不如传统算法高,传统算法精度达到亚像素级别,例如当检测目标边界清晰,对比度明显时,AI得到的面积,位置等信息不够准确,会有3个像素左右的偏差,因此测量类的需求不适合AI解决

AI落地流程

  1. 样本收集阶段

    • 需求分析:获取一定量的图片,梳理和分解需求,根据检测要求,成像效果评估AI是否可行
    • 整体方案:整体算法方案、包括模型数量,分别采用哪种算法、分别采用哪种算法、分别检测哪些缺陷、训练和推理时间,确定相应的硬件配置(主要是显卡)
    • 小批量验证:根据已有的样本,训练AI模型,初步验证模型效果
  2. 初步建立模型

    • 建立模型:扩充样本,确立各类缺陷的标注标准,创建AI模型
    • 优化模型与方案:根据模型效果和检测需求,不断优化模型过检和漏检,保证检出,对检测效果不好的可以考虑调整方案
    • 实际测试:使用检测软件加载模型,试跑实际的产品,跑通检测流程
  3. 批量验证阶段批量试跑

    • 使用检测软件试跑线上的产品,针对OK的误检、NG品的漏检,继续优化模型,或者调整方案标准细化,针对新出现的类型产品缺陷特征,继续细化标注标准
  4. 试运行阶段

    • 上线试运行:上线试跑大量产品,对模型问题进行查漏补缺

模型迭代优化的流程

三个原则+三个问题

  • 三个原则:
    • 构建更好的样本集
      • **样本的数量、比例和质量(代表性)。**收集样本阶段需要注重这三项,要让训练集足够丰富
    • 确立更清晰的标准
      • 基于图像的目视标准,人言可区分。AI作为数据处理工具,要求缺陷能够基于图像肉眼可识别
    • 选择更合适的参数
      • **主要是数据处理参数以及测试参数。**一般参数在一开始的阶段已经确定,后续优化基本也很少发生变化

总结:模型不断迭代优化的过程,是样本集不断完善的过程,也是标准定义逐渐清晰的过程

  • 三个问题

  • 发生漏检,过检,先问三个问题

    • 数据:数据训练集中是否有类似缺陷的产品?

    • 标注:是否类似特征(NG或OK的特征)的标注有误?

    • 成像:该缺陷与干扰在成像上能否区分?

      问题原因分析解决措施
      漏检1.标注是否有误,部分图片中的有漏标,或者标为ok1.确认是否成像漏检,即图像上无法区分该缺陷和背景
      漏检2.训练集中没有类似特征的缺陷2.检查训练集中是否存在该类型缺陷,标注是否有误
      漏检3.该类型缺陷与背景无法区分或特征微弱3.添加该缺陷项对相应的工站的相应的工程里面
      过检1.标注有误,类似特征标注为了NG1.确认是否存在成像过检,即图像上无法区分该特征和缺陷
      过检2.训练集中没有类似特征的缺陷2.检查训练集中是否存在该类型特征,是否误标为缺陷
      过检3.该特征与缺陷无法区分3.添加图像到训练集,标注为OK,优化训练

外观检测项目

接到需求

选型、客户现场打光

客户提供各种类型的不良品 加上部分不良品

针对缺陷打光、记录打光方式

综合不同缺陷的打光方案,看看有的缺陷能不能放在一起

前期根据客户提供的样品训练模型

模型训练完成后小批量测试产品,同时有人工复判

等到模型稳定的时候可以大批量的进行生产

(训练模型可以和写程序同步进行,或者说有助理工程师训练模型)

写程序、出公司进场调试

之前检测的哪些地方?有哪些缺陷?

检测会涉及到过检或漏检如果漏检但没给你ID,你该怎么做?

例:如果有500片有五片漏检

那可以每片料上面都有一个二维码的,用扫码枪扫一下可以出来ID,读到二维码后,直接复制二维码查找图片,找到这五片的图片

1. 看看上面是否有脏污,或者是碰伤啥的一些外在因素
2. 如果不是外在因素,就需要软件本身去改善,比如加一些防呆步骤,或者优化模型
3. 分析是不是上一工站有些问题 导致我们拍照有问题 也可以去找他们的原因漏检的

漏检

根据二维码找到产品图拍呢,首先查看图片上有没有缺陷,如果没有缺陷那可能是后续的工站或者作业岗位造成的需要和客户方沟通,如果是我们的软件没有抓取到缺陷,就把改产品图片添加到不良品训练集中重新训练

过检

根据二维码找到产品图片,看下产品图片上是否有缺陷,如果有较小的缺陷,客户认定为良品,我们可以适当优化模型参数,例如降低面积,周长,阈值等的参数,如果没有缺陷可以查看下不良品训练集里有没有错误标注,如果有则优化,如果没有就把当前图片添加到良品训练集中重新训练

凌云光面试题

1. lsr脱模检测

2.打样过程会记录问题点,怎么记录,怎么拉拢?

  • 手机生产过程中遇到的问题,例如多少种不良,不良类型是什么,什么原因造成的,然后怎么解决的,按类型记录到表格里
  • 怎么拉拢

3.设备出现问题处理的流程

确认问题点,分析问题原因,解决问题

设备能正常运转就让设备先做,在线分析问题

设备不能运转就停机解决问题

作为视觉工程师,或者视觉售后

如果是视觉问题就确认硬件和视觉算法

机构问题机构找售后或机构工程师

PLC问题就找PLC工程师

4.是否有视觉经验、深度学习专业知识?

5.接触哪种类型的相机?康耐视

6.相机线扫还是面阵

面阵,没做过线扫的项目

7.怎么调试才算相机清晰

  1. 对焦(Focus)调整

• 手动/自动对焦:如果使用的是手动对焦镜头,确保通过调整镜头的对焦环来达到最佳焦点,使目标物体在图像中清晰可见。如果是自动对焦镜头,确认对焦机制工作正常。 • 最大对比度原则:通常,可以通过调整对焦,找到物体边缘对比度最强的点,此时图像的清晰度最高。

  1. 分辨率(Resolution)和像素精度

    • 相机分辨率:分辨率决定了图像的精细程度,确保选择的相机分辨率能够满足检测要求。例如,如果需要检测非常细微的划痕或凹坑,可能需要高分辨率相机。 • 像素精度:评估物体在图像中的像素大小,确保物体细节不会因分辨率不足而丢失。例如,如果要检测10微米的划痕,图像中至少应有几个像素能够表现这个划痕。

  2. 曝光和光源调整

    • 曝光时间:调整相机的曝光时间,使得物体表面不过亮也不过暗。曝光过度会导致图像发白,曝光不足则导致图像过暗,影响检测的准确性。 • 光源调整:确保光源均匀且足够亮度,特别是在反光或表面有缺陷的检测中,适当的光源可以大大提升图像清晰度。选择合适的光源类型(如同轴光、漫射光或低角度光)并正确配置角度,以减少反射和提高表面特征的对比度。

  3. 图像锐化和去噪

    • 锐化过滤:可以通过在软件中应用锐化滤波器,增强图像的边缘,使得表面缺陷更加明显。 • 去噪处理:如果图像中有噪声,可以通过去噪算法(如高斯滤波、中值滤波)减少图像噪声,使得真实的缺陷特征更加突出。

  4. MTF(调制传递函数)测试

    • MTF测试:使用调制传递函数(Modulation Transfer Function, MTF)来评估相机系统的分辨能力。这是一种定量分析工具,用于衡量图像系统的清晰度,尤其在高精度场景下,MTF能提供客观指标。 • 测试卡:可以使用标准的测试卡(如USAF 1951)拍摄,检测不同频率的清晰度,确保相机能够分辨目标所需的细节。

  5. 对比度调节

    • 优化对比度:确保相机的对比度设置适当,使得物体的细节和缺陷能在图像中清晰可见。可以使用对比度直方图来判断图像中的灰度级分布,调整对比度范围使其更适合目标物体的检测。

  6. 焦距与视场的匹配

    • 镜头选择:确保所选镜头的焦距与相机的视场相匹配,使得目标物体完整地显示在图像中,同时确保细节足够清晰。例如,如果物体较小且需要精确检测,应选择长焦镜头来放大物体细节。

  7. 实际检测反馈

    • 检测结果反馈:进行缺陷检测时,捕捉到的图像是否能够准确反映缺陷,比如划痕、凹坑和粗糙度等。这也是评估图像是否清晰的重要依据之一。如果在检测过程中经常出现误检或漏检,可能需要进一步优化图像的清晰度。

8.光源会调吗

9.调完对成像会审核吗?

不会,没有用过专门的工具,都是通过上述方法确认

10.做的标定还是检测多

看个人情况,都可以,引导项目就需要做机械手标定

测量项目就需要畸变矫正

外观检测项目就是检测

11.检测会涉及到多检或漏检,如果漏检但没给你ID,你该怎么做(检索文档)

12.漏检的做检测分析报告,会做吗?(FA是异常分析报告)

会,从来料、机构、视觉三方面分析就可以,做完交给上级查看

13.怎样理解深度学习

简单来说通过大量标注和训练,不断优化视觉模型。使得算法能够做到自动识别相同种类的特征

14.在现场你负责怎样的角色,对应还是?你认为自己的沟通能力怎么样?

看自己情况回答

调试,售后,视觉算法,程序都可以

15.接触过的定位标定,那设备往前走了一些该如何处理?

这个问题如果是设备移动位置了

按照标准来说需要重新打机台水平,并标定相机

实际工作中,简单拍一下没问题就继续往下工作

16.缺陷成像怎么做?标注的时候分类

根据不同缺陷,选择不同光源打光

现场就根据视觉方案制定的工位收集不同缺陷的图片,然后拍照训练

17.缺陷成像有强中弱,会调吗

没遇到过,可能是凌云光自己定义的

字面意思可能是,缺陷在图像上呈现的明显程度

可以针对不同缺陷选择特定光源

18.缺陷成像中度,如何分类他们

没明白问题点

19.工作中会持续的深度学习训练吗?训练模型是自己分的吗?

如果说做过深度学习项目,那就说自己按照缺陷类型分类并训练模型

前面如果说没做过深度学习项目这些不用回答

20.深度学习有1-4步,2-3是核心,标注缺陷-分类(深度分级)-训练-匹配(检索文档)

学员面试题

选择照明的三个步骤

  1. 确定照明类型(镜面反射/漫反射/透射光)
  2. 确定照明装置的形状与大小
  3. 确定照明的颜色(波长)

常用的工业镜头接口有哪些

C/CS/M58/M72/F

分辨率是什么?分辨率的计算公式是什么

普通镜头和远心镜头的区别

visionPro中掩膜和建模的区别

什么是弹性参数

枚举的作用是什么

什么情况下会导致内存泄漏

变量之间的转换

单线程和多线程的区别

自动化知识培训

CDD的工作原理是什么

光到达CDD某个像素时,根据光的强度产生相应的电荷,将该电荷的大小读取为电信号,即可获得各个像素上光的强度(灰度值)

CCD按感光器件分为哪两类

CCD/COMS

CDD和COMS的区别

CCD制造技术难,成本高,耗电多,成像质量好

像素是什么

像素是指数字图像的最小单位,是一个可以检测光强度的传感器(光电二极管)

分辨率是什么

像素的密度,像素越多,图像的密度越大,对细节的表现就越强

精度是什么

精度=分辨率*有效像素 精度的单位是mm,根据产品表面和照明状况的不同,我们可以通过放大图像观察辨别稳定像素的个数,从而得出精度,如果条件不允许实际测试观察,一般的规律是,如果使用正面打光,有效像素为1个,使用背光,有效像素为0.5个

CCD的一般选型标准是什么

  1. 检测精度
  2. 色彩选择
  3. 根据传输时间
  4. 根据CCD尺寸

焦距是什么

常用的工业镜头焦距有哪几种规格(说5个以上)

5mm,8mm,12mm,16mm,25mm,35mm,50mm,75mm

光圈是什么

光圈是控制光线透过镜头,进入机身内感光面的光量的装置

景深是什么

如何增大景深

小光圈,小焦距,大工作距离,大光源亮度

常用的工业镜头有哪些

镜头分为哪几类

CCTV镜头(FV)、微距镜头、远心镜头

如何选择合适的镜头

  1. 视野范围、光学放大倍数及期望的工作距离
  2. 景深要求
  3. 芯片大小和相机接口
  4. 注意与光源的配合,选配合适的镜头
  5. 可安装空间

光源的种类有哪些

LED、荧光灯、卤素灯、疝气灯、金属卤素灯

常用光源有哪些

选择照明的三个步骤

简述偏光板的作用

消除反光工件的眩光

简述扩散板的作用

可以将光均匀的扩散到整个平面,可以消除LED的反射,以及在捕捉反光工件的图像时可能产生的异常照明情况

定位视觉引导常见的场景有哪些

抓取、纠偏、对位贴合

定位视觉引导常见的的标定有哪些?

九点标定、旋转中心标定、上下相机坐标统一

2024-9-26面试题

自己做过的项目

LCD玻璃定位贴合项目

贴合前需要一些准备,对玻璃的进行清洁,确保贴合面干净,把相机和光源安装在合适的位置,进行校准与调试,当时用了两个相机,.一个相机用于拍摄玻璃的正面,另一个用于拍摄侧面,获取更多的特征信息,然后三个光源,环形光用于提供均匀的照明,突出边缘的特征,背光源使轮廓更加清晰,条形光用于检测玻璃表面的缺陷,确保检测区域无干扰,光照条件稳定均匀,接着通过机械手吸取产品移动九个位置通过相机分别拍照九个位置的图像,获得九组像素坐标, 再把像素坐标转换为机械坐标, 把九组机械手的坐标对应的视觉坐标填入 Visionpro的九点标定工具中进行校正获取标定结果,查看误差值,一般是5,也就是正负0.5精度,之后再通过相机采集工作场景的图像,进行一些预处理(调整图像参数,对比度,亮度,去噪,平滑等处理),识别玻璃的特征,尺寸,位置等信息,再通过标定抓取玻璃的特征标记,旋转三个角度,分析信息,找出旋转中心,计算得出目前玻璃放置的位置是否准确,和标准位置相比有多少的位移差,并反馈当前的 X/Y 坐标值到 PC 控制系,以确保后面进行准确定位,之后将玻璃胶水初步放置在显示屏框架上,通过机械手臂进行粗略定位,通过调整参数精准的贴合到指定位置,贴合过程中确保压力均匀,过大压力可能导致贴合不牢固玻璃破裂,贴合后进行检测,是否存在位置偏移,存在气泡,GRR一般做到10%以内,根据评估标准来判断是否符合要求,最后记录生成报告.

键盘键帽缺失检测

用了两个相机,一个远心相机,用于检测对象的成像,一个微距镜头,用于键帽面的表面纹理的检测,两个光源,环形光,减少阴影和反光,突出键帽的轮廓和边缘,条形光使键帽表面的特征更明显,有助于更好的提取特征.把相机和光源安装在合适的位置,进行校准与调试,对采集的图像进行去噪预处理,以减少后续的干扰,进行灰度化处理,简化图像,突出键帽的特征.通过VP软件中的模板匹配或特征提取的方式查找键帽的位置,然后再使用斑点,对比等工具针对每个键帽,提取能够表示其存在与否的特征(面积,形状,灰度值等),将提取的特征与预设的正常键帽特征比较,如果差异超过设定的阈值,则判断为缺失,同时检测键帽表面的字符是否存在划痕,或缺失,将检测结果图像上标记出缺失键帽的位置以可视化的形式输出.生成相应的报告,之后通过大量的样本测试,进行优化,提高检测的准确率.(如果问到,准确率,召回率,GRR是多少,精度什么的)

螺母的筛选检测

本项目用了三个相机,一个拍摄螺母的表面,一个拍摄底面,一个拍摄侧面,三个光源,环形光检测表面,背光检测背面,条形光检测侧面,将待检测的螺母放到转盘上,启动转盘螺母将依次被相机拍摄,通过调整相机拍摄的图像,提取能够表示其存在与否的特征(面积,形状,灰度值等),将提取的特征与预设的正常螺母特征比较,如果差异超过设定的阈值,则通过后面的气泵时,不良品的气泵吹动,将产品吹入不良品盒子中,生成报告,之后通过大量的样本测试,进行优化,提高检测的准确率.

重庆摩西智能

关于引导类项目,简单讲讲你在项目中负责工作以及具体流程

  1. 需求分析:了解客户的具体需求,确定项目的关键目标和约束条件
  2. 相机选型
  3. 调整相机位置
  4. 调整机械手位置
  5. 做九点标定和旋转中心
  6. 拿样品测试贴合效果

上海龙未视觉

目前掌握的视觉软件有哪些(visionpro一类的深度学习)

visionpro

HaIcon

visionMaster

HaIcon算子简单列举几个及功能

threshold 阈值分割

connection 连通域分析

sort_region 根据区域的相对位置进行排序

hom_mat2d_identity获取图片的矩阵常量

hom_mat2d_translate 平移矩阵

hom_mat2d_rotate 旋转矩阵

hom_mat2d_scale 缩放矩阵

二开项目中用vpp脚本连接相机流程

需要先连接相机,然后设置参数,看VPP平台提供的设置选项或编程接口,配置相机的各项参数,比如曝光时间,增益,帧率,分辨率什么的;然后编写VPP脚本,在成功连接到相机后,编写代码以实现所需的图像处理逻辑,最后输出结果;当然还得运行一下脚本,测试相机连接和图像处理功能是否正常工作。还有调试问题,如果相机不能连接的话,就得用调试工具排查问题;

深圳华海达科技有限公司

项目中都做过哪些,主要负责什么

根据需求 选择相机镜头光源,调整相机,机械手位置,对物件进行识别

宁德思客琦智能科技

镜头选型:拍摄精密的细节时选择怎样的镜头

  1. 短焦距:适合较大视野场景,但分辨率较低。

    长焦距:适合拍摄细小或远处的物体,视场较窄但能够提供较高的细节分辨

    所以使用长焦

  2. 大光圈:进光亮多,但是景深会变浅,适合低光拍摄,但不利于较大景深的物体

    小光圈:提供更大的景深,适合拍摄有层次的精密物体。

    要根据实际情况,调整光圈大小,确保足够的景深覆盖整个物体表面

  3. 分辨率:需要选择高分辨率镜头,确保充分还原物体细节

  4. 工作距离:一般来说拍摄精密细节时,可能需要较近的工作距离,宏镜头专门用于近距离拍摄

    需要近距离拍摄,选择宏镜头或具有短工作距离的工业镜头

  5. 畸变控制:选择畸变较低的镜头,减少边缘失真对精密检测的影响

类与接口的关系

实现关系:接口定义了方法或属性的声明,但是不提供具体实现,没有方法体

类是c#的基本结构,包含数据和方法,可以创建对象实例,可以实现一个或多个接口,并且在实现接口时必须提供所有接口成员的具体实现

拍摄传送带上的产品时运用面阵相机还是卷帘相机

:卷帘相机:适用于运动中的物体,特别是高速传送带上的产品。卷帘相机逐行扫描物体,适合动态物体成像。

相对于面阵相机,卷帘相机更适合高速场景,因为它可以实现无失真的高分辨率成像。

深圳燕麦(杭州)制造有限公司

上一家公司的规模,位置,合作公司等

简历中挑一个自己认为做的最好的项目来分享一下(关于项目会针对你说的提问问题)

c#中的委托

- 委托是一个类型,类似于C/C++中的函数指针,但比函数指针更安全和灵活。委托可以保存对一个或多个方法的引用,并允许在稍后调用这些方法。
- 一个委托可以指向多个方法,这种功能称为多播委托。

回调模式

回调模式指的是通过将一个方法作为参数传递给另一个方法,从而允许被调用的方法在适当的时机回调(执行)传递的方法,这种模式通常用于异步编程或事件驱动的场景中

1.	**委托回调**
2.	**Lambda 表达式或匿名方法作为回调**
3.	**事件回调**:

c#中不安全的代码

  • 指针操作

  • 不受托管内存限制

  • 需要显式标记

离职原因

对未来工作的期待

期待在工作中能不断接触到新技术、新工具,尤其是我已经具备的机器视觉、C# 和 Vue 等技能领域,能够持续深入研究和应用。

希望未来能参与更多复杂和具有挑战性的项目,尤其是在视觉检测、深度学习等领域,进一步提升自己在算法优化、模型训练方面的能力。

希望在未来的工作中能够获得明确的职业发展路径,有机会从技术专家发展为技术管理者或高级工程师,参与到项目决策和规划中。

期待在工作中有创新的空间,能够提出自己的想法并推动实施,获得更多的成就感

欧诺机械设备(固安)有限公司

自己写的项目全部介绍一下

相机选型和光源

拿到需求,选择合适的分辨率,镜头(长焦短焦),帧率,传感器类型(ccd适合更高精度,cmos性价比高),根据动态静态选择面阵还是线扫还是卷帘相机,根据环境大小选择相机的尺寸

1. 偏振光源(Polarized Light):

   - 特点:通过偏振滤光片,可以消除由于反射光造成的眩光,从而获得更清晰的表面图像。配合偏振滤镜,相机也可以减少反射光的干扰。
   - 应用:对于有光泽或高反光表面的划痕、凹坑检测非常有效。能够减少反光并突出细微的表面缺陷。

2. 同轴光源(Coaxial Light):

   - 特点:同轴光源从相机的光轴方向照射,光线垂直打在物体表面,适合高反光表面。因为光线会沿着物体表面反射回相机,均匀照射可以减少反射造成的亮斑。
   - 应用:适合检测平面或光滑反光表面上的微小凹坑和划痕。光源可以有效减少反射光,并帮助突出表面细节。

3. 漫射光源(Diffuse Dome Light 或 平面漫射光源):

   - 特点:漫射光源通过均匀分布的光照,避免产生强烈的高光反射,形成均匀的照明效果。特别是圆顶光源(Dome Light)可以从多个角度均匀照射物体,消除大部分反射。
   - 应用:适合在反光面上检测凹坑和表面粗糙度。由于光线从各个角度照射,物体表面的反光会被大幅减少,适合处理不规则表面和弧形物体。

4. 低角度环形光源(Low-Angle Ring Light):

   - 特点:光源以低角度照射,可以更好地突出物体表面的划痕和凹坑等缺陷,尤其是对于反光的边缘和表面细节有更好的表现。
   - 应用:适合检测表面划痕和细微凹陷,在具有反光的金属或抛光表面尤为有效。
   **光路**
1. 倾斜角度照射:

   - 将光源从一个特定的角度(而非垂直于物体)照射,避免正面反射光直接进入相机镜头。这种光路设计可以有效减少光线的强烈反射,从而突出表面缺陷,如划痕或凹坑。

2. 暗场照明(Dark Field Illumination):

   - 采用暗场照明的方式,光源从较低角度照射,而相机则从相对较高的角度捕捉反射光。这种方式非常适合检测反光表面上的微小瑕疵,如划痕和表面粗糙度,瑕疵会在镜头中显示为高亮的区域,而光滑的反光面会显示为暗色区域。

3. 多角度照射:

   - 使用多个光源从不同角度同时照射物体表面,特别是在壳体具有复杂表面时,可以通过多个光源的组合来减少强反光区域。多角度的光路设计可以确保即使一个角度有反光,其他角度也能捕捉到清晰的表面信息。

会不会操作VM

会操作vm,自己尝试使用过,对visionpro使用较多,vm和vp的相似程度很高,vp自我感觉更加难,因为页面是英文的,并且属于国外前列的软件,所以对vm可以快速上手

会不会操作PLC

会使用,通过九点标定对机械手进行控制

苏州妙光睿芯智能科技有限公司

具体某个项目硬件的选型(相机,镜头,光源)

东升智能科技

介绍自己在项目中主要负责啥

检测过检、漏检咋办,咋处理,该调啥数

漏检:先查看漏检的图片有没有缺陷,没有缺陷说明是后面的工位出现的问题,如果是软件出现的问题,就把漏检的图片,集中起来重新训练

过检:如果图片有细小缺陷,客户认为是良品,可以根据实际情况调节面积,周长、阈值等参数

AE是现场服务工程师,平时说的自动化大工,中工是技术等级,凌云光叫L1,L2,L3

长沙三兴精密

项目中相机的选型,打光,光源等

项目流程

上位机相关知识

可以通过c#编写winfrom程序,进行tcp udp http通讯,连接数据库,使用多线程对大文件处理,对工厂模式,单例模式等有一定了解

苏州深浅优视智能科技有限公司

介绍一个项目,自己负责的

为什么离职

在之前公司薪资

出差薪资

补贴

自己在技术上的问题

自己使用过的相机类型

海康,索尼,康耐视,基恩士

苏州博众精工

自我介绍

挑一个印象最深的项目进行介绍

关于最近的项目遇到的问题

visionPro工具中toolblock和toolgroup的区别

toolblock更加灵活,可以通过右键添加输入输出,可以添加复杂和简单的脚本

toolgroup更注重工具的组织和分类,是一个逻辑功能

自己用过哪些工具

vpp脚本常用来干什么

对一张图中多个物件进行识别,或者对一张图多个识别 的逻辑处理、结果展示,控制组件的运行

最后如果要显示vpp脚本的作用,需要在vpp的什么地方写什么代码?

GroupRun写逻辑代码 modifyLastRunRecord 进行结果展示 代码顶部定义变量

c#的多线程通常有哪些类型

Thread 类 ThreadPool 线程池 Task 类 async 和 await 异步编程

自己用过什么通讯

网口TCP通信,串口通信,profinet(这个可以说和西门子通信用的s7.net).

关于串口的建立,需要设置哪些参数

串口通信主要参数

  1. 端口名
  2. 波特率
  3. 数据位(DataBits)
  4. 停止位(StopBits)
  5. 校验位(Parity)

在配置串口时,需要根据实际连接的设备和需求来选择合适的参数;

做二次开发怎么实现数据的保存

  1. 确定数据存储方案

  2. 设计数据库模式

  3. 实现数据访问层

  4. 编写保存数据的逻辑

数据保存文件

数据保存

文本:txt

本地稍微复杂的:xml

视频音频图片:二进制

大数据量安全:数据库保存

csv文件的特点

CSV 文件是纯文本文件,每行数据表示一条记录,数据项之间用逗号(或其他分隔符)分隔。因为是文本文件,它可以用任何文本编辑器打开和编辑。

久众欣视

自我介绍

用过哪些VP工具

基本上90%都用过

pmalign 模版匹配

fixure 定位工具

createGraphiclabel 创建文本

blob 斑点工具

测量工具

查找工具

图像预处理工具

工具参数

阈值,对比度阈值,选择区域,极性等

串口通讯,plc

打光

苏州妙光睿芯智能科技有限公司(复试)

挑选一个最有成就感的项目解说(包括流程、人员的各个职责)

VP和VM对比的优缺点

VisionPro (VP):VisionPro 的界面相对更为复杂,偏向于专业工程师的使用。它更侧重于深度配置和精细调试,因此对于新手或需要快速上手的用户来说,可能有一定的学习曲线。它提供了丰富的工具箱,适合进行复杂的视觉任务。

VisionMaster (VM):VisionMaster 的界面相对简洁,更易于使用。它更适合简单的视觉检测任务,或者对于需要快速上手的用户来说更友好。VM 更加注重自动化配置和流程,减少了复杂的调试需求。

离职的具体原因

运动控制卡

运动控制卡是一种用于控制电机、执行器等运动部件的硬件设备,广泛应用于自动化设备、数控机床、机器人等领域。它通过生成控制信号(如脉冲信号、方向信号等)来精确控制电机的运动,通常用于实现精密的位移、速度控制和轨迹规划。

​ •位置控制:控制器通过输出脉冲信号来精确控制电机的转动,从而实现移动部件的精准定位。

​ •速度控制:根据设定的参数,可以控制电机以恒定或可变的速度运行,适用于需要平滑加速和减速的场景。

​ •插补控制:实现多轴联动控制,使多个轴可以同时进行精确的插补运动,适用于复杂的轨迹规划,如圆弧、直线等。

​ •加减速控制:在启动或停止时提供加速度和减速度控制,以确保运动的平稳性。

​ •限位和急停:监控运动范围和突发异常情况,触发限位或急停功能以确保安全运行。

​ •反馈闭环控制:通过接收编码器等传感器反馈,调整控制信号,形成闭环控制,提高运动的精度和稳定性。

品牌研华、固高科技、雷赛智能、美卡诺

深度学习

鑫业诚智能装备(无锡)有限公司(驻厂售后,不涉及开发)

自我介绍

最熟悉的项目介绍

硬件选型

深度学习

一种图像算法,通过训练模型,优化模型,最后导出视觉处理算法。

简单来说通过大量标注和训练,不断的优化视觉模型,使的算法能够做到自动识别相同种类的特征;

深度学习是构建多层神经元网络结构,他是会自动从原始数据中提取特征并且进行学习;

他的主要核心是:构建多层网络结构,包括输入层,隐藏层和输出层,通过权重和偏执链接各层,并利用传播算法来进行训练;

  • 前馈神经网络(Feedforward Neural Networks):信息单向流动,从输入层到输出层,中间可以有多个隐藏层。
  • 循环神经网络(Recurrent Neural Networks, RNN):具有反馈环路,能够处理序列数据,如时间序列分析或自然语言处理。
  • 卷积神经网络(Convolutional Neural Networks, CNN):特别适用于图像和视频分析,通过卷积层来提取空间特征。
  • 深度信念网络(Deep Belief Networks, DBN):由多层受限玻尔兹曼机(RBM)堆叠而成,通常用于特征提取和降维。
  • 自编码器(Autoencoders):用于数据的压缩表示,通过学习输入数据的高效编码和解码。
  • 生成对抗网络(Generative Adversarial Networks, GAN):由生成器和判别器组成,能够生成新的、与真实数据相似的数据样本。

深圳 云思视觉有限公司

自我介绍

询问简历上项目用到的技术

有没有学过其他软件,接触过深度学习

那些项目时自己独立完成的

能否独立开发项目

有没有接触过更复杂的项目

引导类项目

接触过多摄像头(3D类)项目吗

杭州萧山火山口

介绍一到两个项目,以及你在项目中担任的工作

关于深度学习的了解程度

介绍打光的经验

深圳市星特科技股份有限公司

现在位置

什么时候离职的

做哪方面的工作

设备用到哪些

原公司主营方面

辞职原因

上家薪资

苏州妙光睿芯智能科技有限公司初试

自我介绍

干过啥项目,主要负责啥

离职原因

期望薪资

南京海研科技

自我介绍

之前做过的项目

光源中的明暗场

1. 明场光(Bright Field Lighting)

明场光是一种从正面照射目标物体的光照方式,通常是光源与相机镜头同轴或相对置放置。它主要用于突出物体表面的反光区域,增强明亮区域的对比度。 标签检测、物体形状检测、表面划痕检测

适用场景:标签检测、物体形状检测、表面划痕检测

2. 暗场光(Dark Field Lighting)

暗场光是一种从侧面或较低角度照射目标物体的光照方式,光线以小角度接触物体表面,然后向外反射。这样,只有表面上的不平整部分或边缘会反射光线到相机,而平整的表面则不会反射光线,呈现出暗的效果。

适用场景:表面缺陷检测、边缘检测、微小颗粒或瑕疵检测

halcon的使用是金特科技(湖州)

自我介绍

最熟悉的项目介绍

硬件选型

数据库

halcon否可以

昆山捷嵘发

介绍你的项目自己你在里面所承担的职位

在相机选型的时候要注意哪些问题

接触过哪些镜头

打光方式是否了解

visionmaster是否熟悉,能否用visionmaster做一些项目

有独立做项目的经验没有

相机打光的时候用的什么方式

无锡某家公司(太多没找到名字)

有没有做过开发

主流通讯是什么

厂商

引导旋转中心

线程

深圳市视觉龙科技

自我介绍

相机参数

光源类型

光源类型的应用

项目中负责什么

项目内容

南通伍嘉新能源设备(南通伍嘉新能源的面试题很刁钻,但是他们公司去年刚成立很缺人,感兴趣可以去试试)

介绍项目以及自己在项目里承担的工作

visionPro的掌握程度

visionPro工具图像预处理工具的很多功能(如灰度处理,卷积等等)

visionPro的blob工具,高尾部和低尾部的区别

卡尺工具的原理

C#里面多线程了解的情况

多线程了解几种方式

委托的作用

如果现在有10个按钮,我如果要给10个按钮添加不同的功能,有哪些实现方式

1. 单独为每个按钮绑定事件处理程序

2. 使用单个事件处理程序,通过 Tag 属性区分

4. 使用反射或委托

5. 动态生成按钮和功能

如何把visionPro要处理的像素尺寸改为实际尺寸,反之如何实现

对直方图的了解程度

可以获取一张图像上的最小灰度值,最大灰度值,均值,可以通过灰度值选取某些区域

无锡某家公司(太多没找到名字)二次面试

主要是C#和visionpro

要自己可以独立开发项目

相机选型、镜头公式

引导项目是圆形怎么定位

首先判断圆形是不是需要旋转位置,不需要直接九点标定

需要旋转位置的话,找到圆的表面角度的不同的特征,通过九点标定,检测不同点,使机械手在原位置上正旋转90度,负旋转90度,然后通过个位置上的固定一个点,拟合出一个圆

线程,通讯

未来3年——5年打算

客户现场要点检测完后还有时间做什么

  1. 验证检测结果

    复查检测精度

    检测效率测试

    边缘案例测试

  2. 优化视觉系统

    光源优化

    参数调优

    算法优化

  3. 检查硬件设备

    检查机器视觉系统的硬件,包括相机、镜头、光源、工控机等,确保它们在现场没有出现问题,如线路松动、接触不良等。

  4. 和客户讨论进一步需求

现场出现问题怎么解决

分布排查,确定问题,解决问题

硬件、软件、环境

实习期三个月根据情况减

苏州芯华微智能

自我介绍

现在在哪,常用的工具,学历毕业院校

上家公司离职原因,之前主要是做什么,有没有独立的做过项目,哪些是独立完成的大致介绍一下,做检测的时候时出现过的技术问题,怎样解决的该问题,简述自己之前做过的项目

广东深圳电话18664开头

工作经验

目前在哪

离职原因

做过哪些项目

鑫业诚智能装备(无锡)有限公司(驻厂售后,不涉及开发)复试

自我介绍

面试官挑选两个项目,你进行一个流程叙述

期望薪资

苏州妙光睿芯智能科技有限公司复试

项目有多少个人,每个人都负责啥

自己负责的具体内容

这个项目用了多少像素的相机,精度是多少

脚本用了那些算子

参与了项目的验收吗

离职的原因

江苏集萃先进激光科技有限公司(南京)

自我介绍

人现在在哪

之前做过哪些项目

光源镜头选型是否了解

说一下对打光方面的了解,讲个例子

有没有用过运动控制卡,有没有用过机械手,几轴的,怎样标定

之前的公司有没有自己开发的软件

Halcon/c++是否熟悉

离职原因

立铠精密科技(盐城)有限公司

自我介绍

引导项目的详细描述

相机的了解以及3d相机

visionpro的了解程度和一些应用

人现在在哪

九点标定和问十二点标定

九点标定是在标定过程中,选取一个3x3的矩形网格,共9个标定点。通过这些点的坐标信息,校准相机的内部参数(如焦距、光心位置、畸变系数)和外部参数(如相机的旋转和平移)。

优点: 标定点较少,标定过程简单,时间较短。 适合对精度要求不高的应用场景。

缺点:标定精度相对较低,尤其是在需要高精度测量的场合可能不足。 点位较少,无法全面覆盖视野的畸变区域,导致畸变矫正不够精确。

十二点标定通常在更大范围内选择12个特征点,一般为矩形网格中的4x3排列。这种标定方法比九点标定覆盖更多区域,因此能够提供更高的精度和更好的畸变校正。

优点: 较九点标定而言,精度更高,适合需要更高精度的场景。 由于使用了更多的点,能够更好地矫正相机的畸变。

缺点 标定过程稍复杂,所需时间较长。 如果标定板的特征点提取不准确,可能导致误差

像素的单元大小

成都腾帆计算机科技有限公司

HR:自我介绍

技术:如何选择相机、镜头和光源

技术:薄膜检测中为什么选择两个光源

1. 明暗场照明的结合

明场照明:可以提供均匀的光照,有助于观察薄膜的整体特征,如颜色和表面纹理。

暗场照明:有助于突出薄膜表面的缺陷,如划痕、凹坑和其他微小的瑕疵。通过将光源放置在斜角位置,可以产生高对比度的图像,显示出缺陷的边缘。

  1. 提高对比度
  2. 不同角度的光照
  3. 减少反射干扰
  4. 改善成像效果
  5. 增强检测灵敏度
  6. 适应性强

技术:引导项目中为什么选择中孔板光

中孔板光(也称为环形光源或背光源) 主要是为了提升成像效果、减少反射干扰以及优化检测精度。中孔板光源在一些特殊应用场景中能显著提高视觉系统的性能,特别是当检测对象具有特定的形状或光学特性时。 1.减少反射干扰 2.均匀光照 3.增强对比度边缘 4.优化圆形或对称物体的检测 5.适用于透射照明和反射照明 6.减少误差 7。提升系统的鲁棒性

HR:从上家公司的离职原因

HR:对未来的职业规划

HR:在上家公司的薪资

HR:期望薪资是多少

HR:对工作地点的满意度

诺德凯(苏州)智能装备有限公司

自我介绍

介绍项目(两个)

主要负责和框架搭建,功能如何实现

vpp搭建介绍

halcon算子使用过哪些

威海凯成(重庆)

自我介绍

人在哪,户籍在哪,是否离职

是否是非标产品

学的什么专业

深圳开谱勒科技

是否接受出国

学历是否可查

上家薪资

离职原因

主要做哪方面的工作

中精科智能科技

设备都安装好后,你拿到这个机器接下来你要干什么

1.确认硬件连接是否正确无误(相机,光源,运动控制器,传感器等)

2.检查软件配置,visionpro visionMaster等是否安装正确

3.校准系统,进行相机标定和校准,确定系统能够正确识别到物体的位置和尺寸(九点标定,12点标定)

4.测试环境,调整光源,相机焦距,曝光时间等参数

5.测试运行

这个检测率没有达到要求,你该怎么办

1.分析原因(光源,相机参数调整不对,或者算法设置问题)

2.调整光源和相机参数

3.优化算法

4.提高采集频率或分辨率

如果你做完以上操作,还没有达到要求,你该怎么办

1.与技术团队合作,共同分析原因

2.现场调整设备

3.咨询供应商或者技术支持

如果交付后,客户公司没有操作时没有达到客户要求怎么办

1.培训客户公司操作人员,确保他们能正确操作设备

2.进行远程支持或者现场调试

3.分析操作环境的不同

4.提供改进方案

如果你不能按照规定时间到达客户公司,你该怎么办

我的时间安排的很好,不会不能按照规定到达客户公司

提前通知客户

提供远程支持

安排其他工程师到场

如果客户公司要求你必须在这个时间达到,你因为有事会耽误,你该怎么办

提前沟通并协调

寻求团队的支持

紧急情况下 提供补偿措施,比如加班加点调试

成都腾帆计算机科技有限公司(复试)

自我介绍

光源、相机、镜头如何选型

怎么打光

描述项目

C#是什么程度

VM和halcon是什么程度

对C#的多态有什么理解

多线程如何使用?举个例子

C#你是怎么学习的

天津信熙缘科技有限公司

自我介绍

用的什么相机光源

上家薪资

离职原因

高考分数

目前在哪

欧诺机械设备(固安)有限公司

自我介绍

模拟案例问选项以及视觉方案

是否可以独立做小项目

网口通信用的什么协议

随机数0-99排序思路

使用冒泡排序

天津信熙缘科技有限公司(常州)

自我介绍

常用工具

用的什么相机光源

上家薪资

离职原因

目前在哪

深圳云思视觉

自我介绍

挑了两个项目问怎么做的(光源,相机,用到的测试方式)

薪资

西安睿觉

tcp 和 ucp 的区别

用过相机的种类

相机在机械臂上和不在机械臂九点标定的区别

相机在机械臂上:更灵活,适合需要动态引导的复杂任务,但标定复杂,需要考虑机械臂运动的精度。

相机不在机械臂上:标定简单,适合静态任务,但缺乏灵活性,适合固定位置的检测任务。

线程和进程区别

天津云天智能设备有限公司

自我介绍

介绍个自己做过的项目,用了啥相机光源,为啥用这个

能否独立完成一个项目

现在在哪,是否离职状态

上家工资多少

天津信熙缘科技有限公司(常州)

自我介绍

用的什么相机

调试会搭建框架吗?

上家薪资

离职原因

老家哪里的

能接受出国吗?

期望薪资多少?

你有什么问题想知道?

深圳麦格米特

自我介绍

上家公司情况

离职原因

老家哪里

调试中出现的问题

接受将近一年的出差嘛

广东荣讯达技术有限公司

自我介绍

离职原因

懂电气方面的知识吗

主要使用的视觉软件是什么

项目里面主要使用什么相机

项目中用到的那个视觉技术比较多

项目中的算法是自己写的还是使用软件的

聚视智创苏州公司

自我介绍

问项目的成像效果是怎样的

图像预处理的详细效果

中值滤波是什么效果,用在什么场景

均衡滤波是什么效果,用在什么场景

华汉伟业科技

自我介绍

介绍下自己做的项目

产品要的相机像素分辨率咋算的

可见光波长,景深

九点标定,是哪两个坐标系结合

项目产能多少

苏州触目智能科技

自我介绍

视觉工具的运用

上下相机的对位引用技巧有哪些

C#框架搭建

多线程编程是否可完成

成都三是科技有限公司

自我介绍

挑选两个项目,具体讲讲是怎么做的

相机的选型

plc

辞职原因,老家哪里,为啥选择成都这个地方

能否使用Halcon和winform联合编程

c#的熟悉程度

智信精密

自我介绍

全流程说一个最熟悉的项目,中间会有提问

c#的委托是什么,知道回调函数吗

会多线程吗,用过哪些,上家公司情况,离职原因

山东海德智能科技有限公司

自我介绍

c#什么是事件和委托,怎么定义?

如何定义一个int类型的委托。

c#中线程都有那些类型?

项目中相机,光源,镜头的选型。

是否独立开发过项目?

讲一个你近期最熟悉做过的项目?

宁德数智科技有限公司

自我介绍

把NG显示到图片上

多相机定位引导

旋转标定作用

委托和事件的关系

c#和视觉技能的自我评价

多线程的使用

c#和.net的关系

异步编程关键字

上家公司人数,视觉部门人数,地址

河北圣昊光电

自我介绍

说出你最熟悉的项目从选型开始介绍

C#写过demo吗

缺陷检测最主要的工具是什么

缺陷检测选型

C#开发做过什么

C#项目流程

线程可以调用控件吗

离职原因

深圳市汇众智慧科技有限公司

自我介绍

会硬件选型吗

halcon会用吗,什么程度

visionpro是什么程度

项目是自己做的吗

项目当中的程序开发是谁做的

有和客户沟通的经历吗

期望薪资是多少

高贤哲面试题

讲一下自己的项目,要求项目图解

手机芯片检测

https://www.optmv.com/content/details152_4835.html

检测手机芯片表面脏污、划伤等缺陷。通过选用球积分光源,降低光源工作距离,将脏污、划伤明显区别出来。

使用球积分光源,奥普特的RID系列,采用慢反射罩使光线均匀分布在观察视野中,可以消除表面不平的干扰,

思路有两种

  1. 使用好的芯片当作模板,与其他芯片进行对比,两张图片相减可以得到差别

  2. 使用中值滤波,把图片的缺陷划痕进行模糊,然后拿原图和中值滤波后的图片进行相减,得到差异,因为芯片中有白色杂斑和黑色杂斑,背景又分为黑色背景和灰白色背景,所以,相减的图像要选择绝对值,拿到全部的差异

    两者都需要使用Blob工具筛选出差异的杂质

  3. 使用pma工具框选出芯片位置,找到轮廓,使用掩膜,去除干扰因素,比如脏污,缺陷

  4. 使用fixer工具进行原点定位

  5. 使用仿射变换工具剪切出需要检测的区域

  6. 对图像进行预处理,中值滤波

  7. 剪切图与滤波后的图片进行相减得到差异的区域

  8. 使用blob工具分析,提取出芯片表面区域

  9. 使用c#高级脚本将斑点筛选出的区域进行展示

电池和充电器表面OCR字符检测

https://www.china-vision.org/cases-detail/224988.html

  • OCR手机电池字符缺陷检测

    1、OCR字符上有白点; 2、OCR字符模糊; 3、OCR字符重影 ;4、OCR字符缺失 ;5、OCR字符变形 ;6、二维码模糊

  • 手机充电器ocr字符残缺检测

    检测表面充电器表面镭射的LOGO、标签、配置参数等字体是否存在残缺,检测精度在0.1mm以内(即检测到残缺线长超过0.05mm或点大小超过0.1mm*0.1mm为不合格产品)。

  • ocr字符间距测量。产品表面镭射的LOGO、标签、与充电器边沿的距离数据,测量精度在0.05mm以内

  • 条码读取上传

    检测产品表面镭射的条码,上传产品编号和测试结果。

远心镜头的作用,和使用场景

  • 消除视差,提高测量精度,统一景深
  • 工业检测:尺寸测量,表面缺陷检测;半导体行业 晶圆、芯片等微小零件的精确测量;医疗设备检测

同轴光和条形光的作用和原理以及使用场景

减少反射 :玻璃、金属表面

突出边缘轮廓:尺寸测量,识别标签封口

现场画图实操两道题

你学习掌握的编程语言有哪些

c# java javascript

你在之前公司项目中负责什么

打光相机选型调试

是否懂得编译的底层原理展开说一下

计算机原理,将代码编译成二机制

算子原理:由算法矩阵实现

在项目中用到了什么视觉算法

图像预处理均值滤波,二值化,量化,中值滤波

用vpp做过哪类项目?类别?

3c产品芯片缺陷,手机和充电器的ocr识别

检测哪里用的多?

3c产品芯片缺陷,ocr识别

标定是怎么实现的?怎么用的?(九点标定)

先用pma定位,然后机械手调整到相应位置,然后在标定工具中填写pma的像素位置和机械手位置,然后使用九点标定坐标,上下左右定位,机械手会相应改变位置,然后在运行pma工具,将pma工具运行,将相应的坐标与机械手的坐标对应,然后将误差缩小到+-10

旋转中心怎么理解的?跟当前的坐标有什么关系?

当前坐标的+-15,拟合出一个圆

halcon有几个模板比较熟悉?熟悉哪几种?

基于灰度的模版匹配

基于形状的模版匹配

基于尺度和旋转不变的形状模版匹配

halcon里的轮廓模板、相关性等模板有接触吗?

相关性模版匹配

  1. create_ncc_model 相似度模版匹配
  2. 发现模板find_ncc_model
  3. 清除句柄 以免爆内存clear_ncc_model

halcon分类器有用过吗(深度学习)?

你用halcon做过的字符识别项目,详细讲述一下(详细流程)。

车牌识别

  • 蓝色车牌,先对图片进行颜色通道分割,选择出分量适合的通道
  • 然后对通道进行阈值分割,将图像进行开运算,将干扰因素消除
  • 然后使用连通域解析,将图像分割,使用select_sharp筛选出车牌区域
  • 使用变换形状,拿到最小外接矩形,使用fill_up进行填充
  • 使用orientation_region拿到图像弧度,使用仿射变换工具进行对原图旋转
  • 然后截取车牌区域
  • 对图像进行反转,车牌只能识别亮区域
  • 使用阈值分割,连通域,将单个字符分割出来
  • 使用sort_region对图像进行排序
  • 读取识别库
  • 给图像中的对象与识别库进行匹配,然后结果
  • 进行展示

相机的靶面尺寸通常有几个尺寸,分别是多少?

1英寸的是12.8mm:9.6mm

1/3英寸是4.8/3.6mm

1.1英寸是12mm:12mm

4/3是18.5mm:13.5mm

1/4是2.4mm:3.2mm

飞拍项目搞过吗?比如十几秒拍几十张的那种。

同轴光、环形光、背光、条形光等适合什么情况下用。

红外光和紫外光分别有什么特点。

动静态重复性(GRR)

grr重复性 一般做到10%以内,分析特定测量过程中的是否能满足精确程度以满足公差要求,重复性在同一个操作者对相同设备在相同条件下进行多次测量的结果的一致性

通过什么使得上料时触发相机拍照

感应器

有做过外观检测的经验的吗?

检测手机芯片上面的脏污,划痕 就是收集不良品,训练模型、优化模型以达到可以检测的水准

上家公司的薪资是多少,薪资架构包括什么,你这次对薪资的要求

8500 这次9k以上

能否适应加班和出差?出差补贴是怎样的?

可以适应

相机的SDK怎么封装到c#

  1. 引入SDK库

    如果相机SDK是基于C++编写的,则需要使用P/Invoke(Platform Invoke)机制来调用非托管代码。

  2. 可以使用[DllImport]属性来声明外部方法

  3. 创建相机控制类

    建议将相机SDK的功能封装到一个类中,比如CameraWrapper,这样可以更好地管理相机操作。

    定义一些基本的方法,例如OpenCamera、CloseCamera、CaptureImage等,根据SDK的接口实现相应的调用:

  4. 封装事件和回调

  5. 测试封装结果

怎么搭建winform框架按键怎么添加功能

在vs中创建winform项目,设计winform框架,从工具箱拖入button按钮,绑定点击事件

vm和c#联合编程

  1. 配置C#项目并引用VisionMaster的库

  2. 先创建一个VisionMaster的实例,使用API来连接相机,初始化设备。

  3. 一旦连接成功,可以通过调用VisionMaster的采集方法来获取图像数据,然后在C#窗体上显示

  4. 使用VisionMaster的检测功能,如检测边缘、缺陷、形状等。

    可以通过调用API提供的特征提取、模板匹配等方法,将结果返回到C#,并在界面显示检测结果

vp掌握多少,vm会不会

我对VisionPro较为熟练,掌握了它的图像匹配、缺陷检测、九点标定等功能,并且在多个项目中担任过打光、调试、vpp脚本修改的角色。 VisionMaster方面我具备一定使用经验,能够上手操作

微裂痕,不明显脏污检测

构建两个高斯滤波器gen_gauss_fillter,两个滤波器相减sub_image得到滤波核

将图像转为频域图像

将频域图像和滤波核进行卷积运算

将频域图像转为空间域图像

创建检测区域的roi

对roi区域裁剪出来,对裁剪区域进行中值滤波

使用高斯核突出脏污边缘

通过阈值分割分割出缺陷

连通域解析进行分离

膨胀区域 dilation_circle

筛选区域

根据筛选区域,拟合一个最小边界圆

生成圆对象展示在图像上

公司中有哪些瑕疵检测

手机芯片,车门螺丝漏装,Led暇疵

ocr识别流程,二维码识别流程

创建二维码模型,检测读取图像中的二维码数据代码模型,删除2d数据代码模型释放分配资源

常用预处理

mean_image 均值滤波

sobel_amp 图像锐化

laplace 拉普拉斯算子 (锐化)

图像增强算子

scale_image增强图像对比度

emphasize 锐化图像

reduce_domain 裁剪需要的区域

直方图的原理,算子,傅里叶转换算子,卷积算子

直方图拿到整张图像所有像素点灰度信息,可以得到平均值,最大值,最小值,对灰度进行处理

频域图像处理

常用锐化手段

emphasize 锐化图像

sobel_amp 使用Sobel算子检测边缘(振幅) (图像锐化)

laplace 拉普拉斯算法

常用滤波,滤波的作用

gen_lowpass 低通滤波:允许低频信号通过,抑制高频信号。常用于去除信号中的高频噪声

高通滤波器:允许高频信号通过,抑制低频信号。用于提取信号中的边缘和细节

均值滤波:用邻域内像素的平均值替代中心像素值,可以平滑图像,降低噪声

中值滤波:通过取某个窗口内的中值来替代中心像素值,常用于去除椒盐噪声

为什么使用高斯滤波相减后的滤波器

过漏检,以及调试方案

相机检测大尺寸工件的拼图(含偏移,重复)过程,特征点拼图

深度学习,AI处理方面了解程度,使用的是什么库,项目中是否使用

能否独立完成3C类项目

可以

接触过深度学习吗

是基于人类神经网络的机器学习技术,底层是算法,函数,常见的有卷积神经网络,循环神经网络

经常使用缺陷检测、分类、物体识别

在公司主要负责什么

硬件选型,打光,程序编写,调试

九点标定搭配什么机器使用

plc机械臂

卷帘曝光和全局曝光

卷帘曝光,一行一行曝光

全局曝光,整个感光芯片同时曝光

你之前用的哪一家相机

海康,基恩士,康耐视

曝光的时间单位

s ms us都可以

一秒等于多少毫秒

1000ms

tcp区别是什么

服务端 存储数据,向客户端发送数据

客户端 向服务器接收和发送数据

3d和线扫相机用过没有

用过

线扫相机的行触发和帧触发

行触发是一种在每一行图像扫描时发出触发信号的方式。相机在接收到行触发信号时,会开始采集一行的图像数据。

帧触发是一种在每帧图像采集时发出触发信号的方式。与行触发不同,帧触发会在相机准备好采集整个图像帧时发出信号。

相机的最大行频是多少

线扫相机通常为1000HZ-1000HZ

编码器是什么

是一种用于将物理量(如位置、速度、方向等)转换为可读的电信号或数字信号的设备。

编码器通常分为两种主要类型:增量编码器和绝对编码器。

编码器通常通过光学、磁性或电感原理工作

一个线扫相机扫圆扫出来是个椭圆

物体运动速度和相机扫描速度不匹配

镜头畸变

相机安装角度

光源问题,高光反射会使边缘模糊

图像处理算法,图像增强,边缘检测参数设置不当

线扫相机基本概念

是一种工业相机,专门设计用于捕获高速运动的物体或连续流动的材料的图像。 与传统的面阵相机不同,线扫描相机逐行扫描物体,并在一条线上连续捕获图像。 主要应用于快速运动物体的高速图像采集,如高速传送带上的产品检测

普通相机的曝光时间越长取一张图片时间越长吗?

是的

对于多线程任务管理,内存泄露调试,程序Bug调试以及生产过程中的一些异常分析以及排查问题实验的设计与实现这些有相关的经验不?

多线程任务管理经验

线程池:使用线程池来管理资源和控制线程数量,确保系统资源不被过度消耗。 任务分配:如何将任务合理分配到不同线程上,比如IO密集型和计算密集型任务的分配,避免CPU资源浪费。 同步和锁机制:对于需要线程同步的部分,可以讲讲你如何使用锁机制、信号量或并发集合(如ConcurrentQueue等)来管理资源的访问。

内存泄露调试经验

工具使用:比如使用内存分析工具(如Visual Studio自带的诊断工具、WinDbg、DotMemory)找出内存泄露的原因。 具体场景:列举一些你排查过的常见内存泄露情况,如事件未解除订阅、未关闭的文件流或数据库连接、未释放的图片资源等。

程序Bug调试经验

断点调试:如何利用断点一步步排查问题。 日志记录:讲讲如何通过系统日志或专门的调试日志(如log4net、NLog等)收集数据,定位复杂或偶现问题。 异常捕获:讲解异常处理策略,以及如何通过调试和日志结合分析代码的执行路径和状态。

相机的外参和内参分别是什么,如何得到;

一、相机内参(Intrinsic Parameters)

内参是描述相机自身成像特性的参数,主要包括焦距、主点坐标和镜头畸变系数等。内参反映了相机的光学和几何特性,在没有移动相机的位置或调整镜头的情况下,内参一般是固定的。

内参的具体组成:

​ • 焦距 (f_x, f_y):焦距通常用像素表示,分别是x和y方向的像素单位焦距。

​ • 主点 (c_x, c_y):相机成像坐标系的原点(即图像中心),通常与传感器的几何中心不完全重合。

​ • 畸变系数:包括径向畸变(k1, k2, k3 等)和切向畸变(p1, p2 等),主要用于矫正镜头的桶形或枕形畸变。

如何获得相机内参:

​ 1. 标定板准备:使用带有已知标记(如棋盘格或圆点阵列)的标定板。

​ 2. 拍摄标定图像:将标定板放置在相机视野内,拍摄多张不同角度的标定图像。

​ 3. 特征点检测:检测标定板上的特征点(如棋盘格交点或圆点中心)。

​ 4. 内参计算:通过标定算法(如张正友标定法)将标定板上的已知物理坐标与图像中的像素坐标进行映射求解,得到焦距、主点位置和畸变系数等内参。

在OpenCV等工具中,可以使用函数如 cv2.calibrateCamera() 来完成内参的计算。

二、相机外参(Extrinsic Parameters)

外参用于描述相机坐标系与世界坐标系之间的关系,主要包括旋转矩阵和平移向量。外参定义了相机在世界坐标系中的位置和朝向,通常表示为从世界坐标系到相机坐标系的转换。

外参的具体组成:

  • 旋转矩阵 (R):表示相机坐标系相对于世界坐标系的旋转关系。

  • 平移向量 (T):表示相机坐标系相对于世界坐标系的平移关系。

如何获得相机外参:

  1. 标定板准备:与内参标定相同,使用带有已知位置的标定板。
  2. 拍摄标定图像:相机对准标定板拍摄,保证标定板在视野内并且有一定角度变化。
  3. 特征点检测和匹配:检测标定板上的特征点,并匹配已知的标定板坐标(即世界坐标系中的坐标)。
  4. 外参求解:在已知内参的情况下,使用PnP(Perspective-n-Point)算法求解旋转和平移关系。

​ - OpenCV 中的 cv2.solvePnP() 可以用于计算外参,前提是已经得到内参,并且可以匹配到3D世界坐标与2D图像坐标。

内参与外参在成像模型中的作用

其中:

  • (X, Y, Z) 是三维空间中的点的世界坐标。
  • (u, v) 是在图像中的像素坐标。
  • \mathbf{K} 是内参矩阵,包含焦距和主点坐标。
  • \mathbf{R} 和 \mathbf{T} 是外参矩阵,描述相机相对于世界坐标的旋转和平移。
  • s 是比例因子。

内参和外参的应用场景

  1. 相机校准:获得内参和外参后,可以消除镜头畸变、修正图像。
  2. 3D重建:利用外参进行多视角图像的融合,实现三维重建。
  3. 位姿估计:外参描述了相机的空间位置和姿态,可以在机器人导航、增强现实等场景中使用。
  4. 精确测量:已知内外参数,可以实现高精度的尺寸测量和物体定位。

内参和外参的获取是视觉测量、定位和图像处理的基础,通常需要在相机初始安装后进行标定,并在特定场景下校准和优化,以保证精度。

2.点云数据格式有哪些,如果要做点云拼接有哪些常见方法; 3.对于3D视觉应用,对于原始图像的去噪和平滑有那些常见方法; 4.如果想实现2D相机测量一已知尺寸标定板相对位置常见的测量方法有哪些;

使用两个相机拍摄较大物体局部并进行标定和位置角度纠偏的过程:

相机标定

  1. 单相机标定:分别对两个相机单独进行标定。通常采用棋盘格标定板,拍摄不同角度和位置的棋盘格图像。利用棋盘格的已知角点坐标(世界坐标)和检测到的图像角点坐标,通过张正友标定法等方法来计算相机的内参数(包括焦距、主点坐标等)和外参数(相机相对于标定板的旋转和平移)。

  2. 双相机相对标定:在完成单相机标定后,需要确定两个相机之间的相对位置和姿态关系,即外参数。这可以通过同时观察一个已知的三维物体(如带有标记点的特制标定物)来实现。通过在两个相机图像中提取对应的特征点,然后利用三角测量原理和非线性优化算法(如Bundle Adjustment)计算出两个相机之间的旋转矩阵和平移向量。

位置角度纠偏

  1. 特征提取与匹配:在两个相机拍摄的局部物体图像中提取特征点,如SIFT、SURF或ORB等特征点。然后通过特征匹配算法找到两幅图像中对应的特征点对。

  2. 计算变换关系:根据匹配的特征点对,使用最小二乘法等方法计算从一个相机图像到另一个相机图像的变换矩阵(包括旋转和平移)。假设在相机1图像中有一点,通过变换矩阵可以将其映射到相机2图像中的对应点,即,其中是一个的矩阵,包含了旋转、平移、缩放等信息。

  3. 位置角度纠偏:利用计算得到的变换矩阵对物体局部在两个相机图像中的位置和角度进行纠偏。例如,如果想要将相机1中的局部物体位置和角度与相机2中的对齐,可以将相机1中的点通过变换矩阵变换到相机2的坐标系下,从而实现位置和角度的统一。在实际操作中,对于每个要纠偏的点或物体轮廓上的点,都按照上述矩阵乘法进行计算,然后根据纠偏后的点重新构建物体在统一坐标系下的局部表示。

在整个过程中,矩阵变换起到了关键作用。通过相机标定得到的内参数矩阵和外参数矩阵,可以将三维世界坐标转换为相机图像坐标。在双相机系统中,两个相机之间的相对旋转和平移矩阵用于将一个相机坐标系下的点转换到另一个相机坐标系下,从而实现位置和角度的纠偏。

Released under the MIT License.