Beispiel #1
0
 public GameSession(Connection<GameSession> client, int version, int timeout)
 {
     this.m_client = client;
     //异步发送
     this.Type = (int)PlayerType.Undefined;
     this.State = PlayerState.None;
     this.ClientVersion = version;
     if (timeout <= 0)
     {
         timeout = 15;
     }
     MyTimer CheckTimer = new MyTimer(1000, timeout);
     CheckTimer.AutoReset = true;
     CheckTimer.Elapsed += delegate
     {
         if (!string.IsNullOrEmpty(Name))
         {
             CheckTimer.Stop();
             CheckTimer.Close();
         }
         if (CheckTimer.CheckStop())
         {
             //超时自动断开
             CloseAsync();
             CheckTimer.Close();
         }
     };
 }
Beispiel #2
0
 public MyImage(Image image)
 {
     _image     = image;
     _startTime = MyTimer.getInstance().getTime();
     _image.HorizontalAlignment = HorizontalAlignment.Left;
     _image.VerticalAlignment   = VerticalAlignment.Top;
     _image.MinHeight           = 50;
     _image.MinWidth            = 50;
 }
Beispiel #3
0
 public BaseMiningRocks(Ores oreType)
     : base(Utility.RandomBool() ? 0x1367 : Utility.RandomList(0x1363, 0x1364, 0x1367, 0x136A, 0x136D))
 {
     mOreType   = oreType;
     OrePresent = true;
     Movable    = false;
     Stackable  = false;
     myTimer    = new MyTimer(this);
 }
Beispiel #4
0
 private void LaunchTimerToHideError()
 {
     if (timer == null)
     {
         timer = new MyTimer(2000, 2000, PasswordEditText);
     }
     timer.Cancel();
     timer.Start();
 }
Beispiel #5
0
        /// <summary>
        /// 异步删除文件, 主要是为了给自定义打印实现一个辅助函数
        /// </summary>
        /// <param name="delaySencods">延迟秒数</param>
        /// <param name="fileFullPath">文件完成物理路径</param>
        public void DeleteFileAsyn(double delaySencods, string fileFullPath)
        {
            var deleteFileTimer = new MyTimer(delaySencods * 1000, this.DeleteFileDelegate)
            {
                filePath = fileFullPath
            };

            deleteFileTimer.Start();
        }
Beispiel #6
0
 private void Setup()
 {
     AllEvents             = GetEvents();
     eventList.ItemsSource = AllEvents;
     for (int n = 0; n < 1; n++)
     {
         myTimers[n] = new MyTimer(new TimeSpan(0, 0, 1), AllEvents, AllEvents[n], eventList);
     }
 }
 public Projectile2d(string PATH, Vector2 POS, Vector2 DIMS, Unit OWNER, Vector2 TARGET) : base(PATH, POS, DIMS)
 {
     done      = false;
     speed     = 10.0f;
     owner     = OWNER;
     direction = TARGET - owner.pos;
     direction.Normalize();
     timer = new MyTimer(1200);
 }
 static void Main(string[] args)
 {
     MyTimer.Create(
         () => { Console.WriteLine("hello"); },
         5000);
     GC.Collect();
     GC.WaitForPendingFinalizers();
     Console.Read();
 }
Beispiel #9
0
        public static bool ListAndTakeNewTarget(List <WoWUnit> units)
        {
            string fnname = "FTWCore.ListAndTakeNewTarget";

            MyTimer.Start(fnname);
            if (units == null || units.Count == 0)
            {
                MyTimer.Stop(fnname);
                return(false);
            }

            WoWUnit newtarget = units[0];

            // Leave early if the first unit is the same as the current target
            if (newtarget.Guid == StyxWoW.Me.CurrentTargetGuid)
            {
                MyTimer.Stop(fnname);
                return(false);
            }
            FTWLogger.log(Color.Violet, "Retargeting during combat - taking the first target from the list below.");
            foreach (WoWUnit unit in units)
            {
                string tag2 = "";
                if (unit.Guid == newtarget.Guid)
                {
                    tag2 += "+";
                }
                if (unit.Guid == StyxWoW.Me.CurrentTargetGuid)
                {
                    tag2 += "-";
                }
                if (unit.Guid == FTWProps.tank.CurrentTargetGuid)
                {
                    tag2 += "t";
                }
                tag2 = (tag2 + "  ").Substring(0, 2);
                FTWLogger.log(Color.Violet, "    {0} {1,-24} cc={2} atkhlr={3} wgt={4} thr={5} tank={6} inrange={7} dist={8:0.0} atk={9} {10} {11:0}",
                              tag2,
                              unit.SafeName(),
                              unit.IsCrowdControlled() ? 1 : 0,
                              unit.IsAttackingHealer() ? 1 : 0,
                              unit.TargetWeight(),
                              (int)unit.ThreatInfo.ThreatStatus,
                              unit.Guid == FTWProps.tank.CurrentTargetGuid ? 1 : 0,
                              unit.Distance < 5 ? 1 : 0,
                              unit.DistanceCalc(),
                              unit.CurrentTarget != null && unit.CurrentTarget.IsPlayer ? "?" : "",
                              unit.CurrentTarget != null ? unit.CurrentTarget.SafeName() : "",
                              unit.CurrentTarget != null ? unit.CurrentTarget.HealthPercent : 0);
            }
            newtarget.Target();
            FTWCoreMovement.Face(newtarget);

            MyTimer.Stop(fnname);
            return(true);
        }
Beispiel #10
0
        private void PaidAccountsRadForm_Load(object sender, EventArgs e)
        {
            MyTimer.Start();

            DoPayRadButton.Enabled = false;
            this.PaidAccountsRadGridView.EnableGrouping    = false;
            this.PaidAccountsRadGridView.TableElement.Text = String.Empty;

            this.PaidAccountsDetailsRadGridView.EnableGrouping = false;
        }
Beispiel #11
0
            private static void OnTimedEvent(Object source, ElapsedEventArgs e)
            {
                MyTimer chrono = source as MyTimer;

                if (chrono != null)
                {
                    chrono.Parent.PlusVieilleTrameStream.Add(chrono.ID);
                    chrono.Parent.EventStream.Add(TypeEvenement.Timeout);
                }
            }
Beispiel #12
0
        void StopTimer()
        {
            if (_timer == null)
            {
                return;
            }

            _timer.Stop();
            _timer = null;
        }
Beispiel #13
0
        public static bool On_Eat()
        {
            string fnname = "FTWCore.On_Eat";

            MyTimer.Start(fnname);
            bool retval;

            if (BotPoi.Current.Type != PoiType.None)
            {
                return(false);
            }

            if (StyxWoW.Me.HasAura("Food"))
            {
                retval = true;
            }
            else if (FTWCoreStatus.OnCooldown("On_Eat"))
            {
                retval = false;
            }
            else if (FTWUtils.MovementDisabled())
            {
                retval = false;
            }
            else if (StyxWoW.Me.Mounted)
            {
                retval = false;
            }
            else
            {
                WoWItem eat = Consumable.GetBestFood(false);
                if (eat == null)
                {
                    retval = false;
                }
                else
                {
                    Navigator.PlayerMover.MoveStop();
                    Styx.CommonBot.Rest.FeedImmediate();
                    DateTime stoptime = DateTime.Now.AddSeconds(10);
                    while (DateTime.Now < stoptime)
                    {
                        if (StyxWoW.Me.HasAura("Food"))
                        {
                            break;
                        }
                        Thread.Sleep(100);
                    }
                    FTWCoreStatus.SaveCooldown("On_Eat");
                    retval = true;
                }
            }
            MyTimer.Stop(fnname);
            return(retval);
        }
        public DerelictTimer(IMyCubeGrid grid)
        {
            m_Grid = grid;

            m_TimerInfo = null;
            m_Timer     = null;

            CompletedPhase = DT_INFO.PHASE.NONE;

            m_Logger = new Logger(m_Grid.EntityId.ToString(), "DerelictTimer");
        }
Beispiel #15
0
 private void CustomerListRadForm_Load(object sender, EventArgs e)
 {
     this.CustomersRadGridView.EnableGrouping               = false;
     this.CustomersRadGridView.TableElement.Text            = "Cargando Datos..";
     this.CustomersRadGridView.TableElement.BackgroundImage = KoontabiTelerikWinFormsApp.Properties.Resources.loader;
     MyTimer.Start();
     this.SearchingRadTextBox.Focus();
     this.SearchingRadTextBox.TextChanged += SearchingRadTextBox_TextChanged;
     SelectingRadButton.Enabled            = false;
     SearchingRadTextBox.Focus();
 }
Beispiel #16
0
    public void SetEventHandler()
    {
        ElapsedEventHandler handler = Handler;

        timer = new MyTimer(10);
        timer.SetEventHandler(Handler);

        State.GetState(timer);

        Assert.AreEqual(Handler, State.Handler);
    }
Beispiel #17
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="image"></param>
 public MyImage(String url)
 {
     _image     = InkConstants.getImageFromName(url);
     _id        = url;
     _startTime = MyTimer.getInstance().getTime();
     pathName   = url;
     _image.HorizontalAlignment = HorizontalAlignment.Left;
     _image.VerticalAlignment   = VerticalAlignment.Top;
     _image.MinHeight           = 50;
     _image.MinWidth            = 50;
 }
Beispiel #18
0
        public MainWindow()
        {
            InitializeComponent();

            var timer          = new MyTimer();
            var timerViewModel = new TimerViewModel(timer);

            new Follower("First follower", timer);
            new Follower("Second follower", timer);

            DataContext = timerViewModel;
        }
Beispiel #19
0
 public SocketConnectServer()
 {
     mClientList      = new Dictionary <uint, NetClient>();
     mMaxReceiveCount = 1024 * 1024 * 8;
     mClientSendLock  = new ThreadLock();
     mClientRecvLock  = new ThreadLock();
     mAcceptThread    = new MyThread("AcceptThread");
     mReceiveThread   = new MyThread("SocketReceive");
     mSendThread      = new MyThread("SocketSend");
     mRecvBuff        = new byte[mMaxReceiveCount];
     mHeartBeatTimer  = new MyTimer();
 }
Beispiel #20
0
        private void initTimer()
        {
            long maxSecond = 20 * 60;

            lbTime.Text = maxSecond.toTimeString();
            MyTimer timer = new MyTimer(maxSecond); // 20 phut

            timer.onMyTimerTick += second =>
            {
                lbTime.Text = second.toTimeString();
            };
        }
Beispiel #21
0
    public void Start()
    {
        timer = new MyTimer(100);
        timer.Start();

        State.GetState(timer);

        Assert.IsTrue(State.IsTimerEnabled);
        Assert.IsTrue(State.IsStopWatchEnabled);
        Assert.AreEqual(0, State.ResumeInterval);
        Assert.AreEqual(100, State.TimerInterval);
    }
Beispiel #22
0
 private void MyTimer_Tick(object sender, EventArgs e)
 {
     try
     {
         //UpdateGrid();
         MyTimer.Stop();
     }
     catch (Exception)
     {
         throw;
     }
 }
Beispiel #23
0
        public static bool On_UseBandage()
        {
            bool retval = true;

            if (!(BotPoi.Current.Type == PoiType.None || BotPoi.Current.Type == PoiType.Kill))
            {
                return(false);
            }

            string fnname = "FTWCore.On_UseBandge";

            if (StyxWoW.Me.HasAura("Recently Bandaged"))
            {
                return(false);
            }
            MyTimer.Start(fnname);
            using (StyxWoW.Memory.AcquireFrame())
            {
                if (!FTWUtils.ValidState())
                {
                    retval = false;
                }
                else if (FTWUtils.MovementDisabled())
                {
                    retval = false;
                }
                else if (StyxWoW.Me.Mounted)
                {
                    retval = false;
                }
                else
                {
                    WoWItem potion = (from i in StyxWoW.Me.CarriedItems
                                      let spells = i.ItemSpells
                                                   where i.GetItemName().Contains("Bandage")
                                                   where i.ItemInfo != null && i.ItemInfo.RequiredLevel <= StyxWoW.Me.Level
                                                   orderby i.ItemInfo.Level descending
                                                   select i).FirstOrDefault();

                    if (potion == null)
                    {
                        retval = false;
                    }
                    else
                    {
                        potion.UseContainerItem();
                        retval = true;
                    }
                }
            }
            MyTimer.Stop(fnname);
            return(retval);
        }
Beispiel #24
0
        /// <summary>
        /// 笔迹回放
        /// </summary>
        private void strokePlay()
        {
            if ((strokesForPlayback.Count == 0) || (_inkCollector.IsPlaying == false))//没有要播放的笔迹或者不在播放状态
            {
                return;
            }
            MyStroke currentStroke = strokesForPlayback[playbackStrokeIndex];

            if (playbackPointIndex == 0)
            {
                StylusPointCollection spc = new StylusPointCollection();
                spc.Add(currentStroke.Stroke.StylusPoints[playbackPointIndex]);
                strokeToPlayback = new Stroke(spc);
                strokeToPlayback.DrawingAttributes = currentStroke.DrawingAttributes;
                _inkFrame._inkCanvas.Strokes.Add(strokeToPlayback);
                double progress = (double)(playbackStrokeIndex + 1) / (double)(strokesForPlayback.Count);
                this.timeBar.setProgress(progress);
            }

            strokeToPlayback.StylusPoints.Add(currentStroke.StylusPoints[playbackPointIndex]);
            playbackPointIndex++;
            if (playbackPointIndex < currentStroke.StylusPoints.Count)
            {
                strokeToPlayback.StylusPoints.Add(currentStroke.StylusPoints[playbackPointIndex]);
                playbackPointIndex++;
            }
            this.timeBar.StrokePlayButton = StrokePlayButton.StopPlay;
            if (playbackPointIndex == currentStroke.StylusPoints.Count)
            {
                playbackPointIndex = 0;
                playbackStrokeIndex++;
                if (playbackStrokeIndex >= strokesForPlayback.Count)
                {
                    //结束播放
                    _inkCollector.Mode = InkMode.Ink;
                    _inkFrame._inkCanvas.Strokes.Clear();

                    for (int i = 0; i < _inkCollector.Sketch.MyStrokes.Count; i++)
                    {
                        _inkFrame._inkCanvas.Strokes.Add(_inkCollector.Sketch.MyStrokes[i].Stroke);
                    }

                    this.timeBar.setProgress(0);
                    _inkCollector.IsPlaying = false;
                    _inkCollector.Mode      = InkMode.Ink;
                    MyTimer.getInstance().Resume();
                    this.timeBar.StrokePlayButton = StrokePlayButton.StartPlay;
                    this._controlPanel.Visibility = Visibility.Visible;
                    return;
                }
            }
        }
 public ControlUnitMediator()
 {
     this.magneticSteels                   = new List <MagneticSteel>();
     this.caissons                         = new List <Caisson>();
     this.radars                           = new List <Radar>();
     this.cameraSignalControls             = new List <CameraSignalControl>();
     this.goTrainTimeout                   = 0;
     this.farEndTriggerCount               = 0;
     this.nearEndTriggerCount              = 0;
     this.goTrainTimeoutTimer              = new MyTimer(30000);
     this.goTrainTimeoutTimer.WaitCallback = new WaitOrTimerCallback(CallbackFun);
     this.udpClent                         = new UdpClient();
 }
Beispiel #26
0
 //Yeni sayfaya geçmeden önceki bekletme ayarlandı.
 private void NextPageTimer(double time, bool correct)
 {
     if (correct)
     {
         otherTimer = new MyTimer(TimeSpan.FromSeconds(1), NextScreen, false);
     }
     else
     {
         otherTimer = new MyTimer(TimeSpan.FromSeconds(1), LostScreen, false);
     }
     mainTimer.Stop();
     otherTimer.StartTime(time);
 }
Beispiel #27
0
        public static int StunCount(WoWPoint loc)
        {
            string fnname = "FTWCore.StunCount";

            MyTimer.Start(fnname);
            int cnt = (from u in FTWProps.adds
                       where u.IsCrowdControlled()
                       where u.Location.Distance(loc) < 8
                       select u).Count();

            MyTimer.Stop(fnname);
            return(cnt);
        }
Beispiel #28
0
    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "DABA")
        {
            Debug.Log("stuff happens");
            Gun.ammunition++;
            other.gameObject.SetActive(false);


            MyTimer t = Instantiate(timerPrefab);
            t.SetUpTimer(2, () => { other.gameObject.SetActive(true); });
        }
    }
Beispiel #29
0
        public static bool On_AutoAttack()
        {
            string fnname = "FTWCore.On_AutoAttack";

            MyTimer.Start(fnname);
            if (!StyxWoW.Me.IsAutoAttacking && StyxWoW.Me.CurrentTarget != null)
            {
                FTWLogger.log("    AutoAttack");
                Lua.DoString("StartAttack()");
            }
            MyTimer.Stop(fnname);
            return(false);
        }
Beispiel #30
0
        protected StartupResultEnum Startup(uint maxConnections, ushort port, string host)
        {
            StartupResultEnum result = m_peer.Startup(maxConnections, port, host);

            if (result == StartupResultEnum.RAKNET_STARTED)
            {
                m_timerAction = new Action(ReceiveMessageInternal);
                m_timer       = new MyTimer(1, m_timerAction);
                m_timer.Start();
            }

            return(result);
        }
Beispiel #31
0
        public override void Run(VoidAction tickCallback)
        {
            long targetTicks = 0;

            ManualResetEventSlim waiter = new ManualResetEventSlim(false, 0);

            MyTimer.TimerEventHandler handler = new MyTimer.TimerEventHandler((a, b, c, d, e) =>
            {
                waiter.Set();
            });

            base.Run(delegate
            {
                using (StatGroup.Measure(StatName))
                {
                    var currentTicks = m_gameTimer.ElapsedTicks;

                    // Wait for correct frame start
                    targetTicks += TickPerFrame;
                    if (currentTicks > targetTicks + TickPerFrame * 5)
                    {
                        // We're more behind than 5 frames, don't try to catch up
                        targetTicks = currentTicks;
                    }
                    else
                    {
                        // For until correct tick comes
                        if (EnableUpdateWait)
                        {
                            var remaining = MyTimeSpan.FromTicks(targetTicks - currentTicks);
                            int waitMs    = (int)(remaining.Miliseconds - 0.1); // To handle up to 0.1ms inaccuracy of timer
                            if (waitMs > 0)
                            {
                                waiter.Reset();
                                MyTimer.StartOneShot(waitMs, handler);
                                waiter.Wait(17); // Never wait more than 17ms
                                //Debug.Assert(MyPerformanceCounter.ElapsedTicks < targetTicks);
                                //VRageRender.MyRenderStats.Write("WaitRemaining", (float)MyPerformanceCounter.TicksToMs(targetTicks - MyPerformanceCounter.ElapsedTicks), VRageRender.MyStatTypeEnum.MinMaxAvg, 300, 3);
                            }
                        }
                        while (m_gameTimer.ElapsedTicks < targetTicks)
                        {
                            ;
                        }
                    }
                }

                //UpdateInternal();
                tickCallback();
            });
        }
Beispiel #32
0
		public GameTimer(GameRoom room)
		{
			this.room = room;
			SideTimer = new MyTimer(30 * 1000, SIDE_TIMEOUT);
			SideTimer.AutoReset = true;
			SideTimer.Elapsed += new ElapsedEventHandler(SideTimer_Elapsed);
			
			StartingTimer = new MyTimer(10 * 1000, STARTING_TIMEOUT);
			StartingTimer.AutoReset = true;
			StartingTimer.Elapsed+=new ElapsedEventHandler(StartingTimer_Elapsed);
			
			HandTimer = new MyTimer(15 * 1000, Hand_TIMEOUT);
			HandTimer.AutoReset = true;
			HandTimer.Elapsed +=new ElapsedEventHandler(HandTimer_Elapsed);
		}
Beispiel #33
0
    /**
     * Initialize the game.
     */
    public void InitGame(SmartFox smartFox)
    {
        // Register to SmartFox events
        sfs = smartFox;
        sfs.AddEventListener(SFSEvent.EXTENSION_RESPONSE, OnExtensionResponse);
        timer = new MyTimer();
        // Setup my properties
        myPlayerID = sfs.MySelf.PlayerId;

        // Reset game board
        ResetGameBoard();

        // Tell extension I'm ready to play
        sfs.Send(new ExtensionRequest("ready", new SFSObject(), sfs.LastJoinedRoom));
    }
 public GestioneGiardino()
 {
     _giardino = new Giardino();
     _timers = new MyTimer();
     OraInizioInnaffiatura = DateTime.Now;
     TimeSpan ts;
     if(OraInizioInnaffiatura.Hour>19)
     {
         ts = new TimeSpan(1, 19, 0, 0);
     }
     else
     {
         ts = new TimeSpan(19, 0, 0);
     }
     OraInizioInnaffiatura = OraInizioInnaffiatura.Date + ts;
     Intervallo = new TimeSpan(1, 0, 0, 0);
 }
Beispiel #35
0
 public Session(Connection<Session> client, RoomServer server, int timeout = 15)
 {
     this.Client = client;
     this.Client.Tag = this;
     this.Server = server;
     MyTimer CheckTimer = new MyTimer(1000, timeout);
     CheckTimer.AutoReset = true;
     CheckTimer.Elapsed += delegate
     {
         if (!string.IsNullOrEmpty(Name))
         {
             CheckTimer.Stop();
             CheckTimer.Close();
         }
         if (CheckTimer.CheckStop())
         {
             //超时自动断开
             Close();
             CheckTimer.Close();
         }
     };
 }
Beispiel #36
0
        private static void fastPruningWithRSC()
        {
            int s = 100, r = 5;
            MyTimer timer = new MyTimer();

            string[] templatefiles = Directory.GetFiles(@"D:\Play Data\train_data\sc\", "*.sc")
                .Take(1000).ToArray();
            #region 打开模板
            string templatepath = @"D:\Play Data\template\";
            int templatecount = templatefiles.Length;
            Debug("打开{0}个模板--------------------------------------------", templatecount);
            double[][,] templates = new double[templatecount][,];
            int[] templatenums = new int[templatecount];
            timer.Restart();
            for (int i = 0; i < templatefiles.Length; ++i) {
                string file = templatefiles[i];
                string filename = Path.GetFileNameWithoutExtension(file);
                templatenums[i] = int.Parse(filename.Split('-')[1]);
                templates[i] = new double[s, 60];
                unsafe {
                    #region 指针也快不了多少
                    //byte[] data = File.ReadAllBytes(file);
                    //fixed (byte* ptr = data) {
                    //    //using (var fs = new FileStream(file, FileMode.Open)) {
                    //    //    using (var br = new BinaryReader(fs)) {
                    //    int offset = 0;
                    //    for (int j = 0; j < s; ++j) {
                    //        for (int k = 0; k < 60; ++k) {
                    //            //templates[i][j, k] = br.ReadDouble();
                    //            fixed (double* t = &templates[i][j, k]) {
                    //                for (int p = 0; p < sizeof(double); ++p)
                    //                    *((byte*)t + p) = *(ptr + offset++);
                    //            }
                    //        }
                    //    }
                    //}
                    #endregion
                    using (var fs = new FileStream(file, FileMode.Open)) {
                        using (var br = new BinaryReader(fs)) {
                            for (int j = 0; j < s; ++j) {
                                for (int k = 0; k < 60; ++k) {
                                    templates[i][j, k] = br.ReadDouble();
                                }
                            }
                        }
                    }
                }
                if (i % 100 == 0)
                    Debug("已完成{0}个", i);
            }
            Debug("模板读取完成,用时{0}ms.", timer.Stop());
            #endregion

            string[] testfiles = Directory.GetFiles(@"D:\Play Data\test\", "*.bmp")
                .Take(100).ToArray();
            #region 测试
            int testcase = testfiles.Length, acc = 0;
            Debug("为{0}个对象寻找候选模板------------------------------------------", testcase);
            foreach (var file in testfiles) {
                timer.Restart();
                string filenameext = Path.GetFileName(file);
                string filename = Path.GetFileNameWithoutExtension(file);
                int thisnum = int.Parse(filename.Split('-')[1]);
                Image<Gray, Byte> img = new Image<Gray, byte>(file);
                var list = getEdge(img.Resize(2.5, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR)).Sample(s);
                var sc100 = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC(list);
                double[,] scq = new double[r, 60];
                for (int i = 0; i < 5; ++i) {
                    int pos = rand.Next(s);
                    for (int k = 0; k < 60; ++k) {
                        scq[i, k] = sc100[pos, k];
                    }
                }
                var arr = new ValueIndexPair<double>[templatecount];
                for (int i = 0; i < templatecount; ++i) {
                    double[,] sci = templates[i];
                    double[,] costmat = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(scq, sci);
                    double cost = 0;
                    for (int j = 0; j < 5; ++j) {
                        double min = double.MaxValue;
                        for (int u = 0; u < s; ++u) {
                            double val = costmat[j, u];
                            if (val < min) min = val;
                        }
                        cost += min;
                    }
                    arr[i] = new ValueIndexPair<double> { Value = cost, Index = i };
                }
                Array.Sort(arr, (a, b) => a.Value.CompareTo(b.Value));
                int[] matchcount = new int[10];
                double[] matchcost = new double[10];
                int knn = 10;
                foreach (var pair in arr.Take(knn)) {
                    int num = templatenums[pair.Index];
                    matchcount[num]++;
                    matchcost[num] += pair.Value;
                }
                var match = matchcount.Select((val, i) => new { Count = val, Num = i })
                                      .Where(v => v.Count > 0)
                                      .OrderByDescending(v => v.Count).ToArray();
                //var match = matchcost.Select((val, i) => new { Cost = val / matchcount[i], Num = i })
                //                     .Where(v => !double.IsNaN(v.Cost))
                //                     .OrderBy(v => v.Cost).ToArray();

                #region 进行精细匹配,效果一般
                //double[] matchrate = new double[10];
                //foreach (var m in match) {
                //    if (m.Count == 0) break;
                //    string template = Path.Combine(templatepath, m.Num + ".bmp");
                //    Jim.OCR.ShapeContext2D.ShapeContext sc = new Jim.OCR.ShapeContext2D.ShapeContext(file, template);
                //    sc.debug_flag = false;
                //    sc.timer_flag = false;
                //    sc.display_flag = false;
                //    sc.n_iter = 3;
                //    sc.matchScale = 2.5;
                //    sc.maxsamplecount = 100;
                //    matchrate[m.Num] = sc.MatchFile();
                //}
                //var bestmatches = matchrate.Select((val, i) => new { Cost = val, Num = i })
                //                           .Where(m => m.Cost > 0)
                //                           .OrderBy(m => m.Cost).ToArray();
                //int firstmatch = bestmatches[0].Num;
                #endregion

                int firstmatch = match[0].Num;
                var fc = Console.ForegroundColor;
                Console.ForegroundColor = firstmatch == thisnum ? ConsoleColor.Green : ConsoleColor.Red;
                string info = String.Format("{0} {1}ms - {2}\t", filename, timer.Stop(), (firstmatch == thisnum ? "Right" : "Wrong"));
                //foreach (var m in bestmatches.Take(4)) {
                foreach (var m in match) {
                    info += String.Format("{0}/{1}\t", m.Num, m.Count);
                    //info += String.Format("{0}/{1:F3}\t", m.Num, m.Cost);
                    //info += String.Format("{0}/{1:F3}\t", m.Num, m.Cost);
                }
                Debug(info);
                Console.ForegroundColor = fc;

                if (firstmatch == thisnum) {
                    ++acc;
                }
            }
            Debug("测试用例:{0}。正确率{1}。", testcase, acc);
            #endregion
        }
Beispiel #37
0
        private static ImageShapeContext CreateShapeContext(string path, string fontFamily, int samplecount, char c)
        {
            MyTimer timer = new MyTimer();
            Font font = new Font(fontFamily, 240);
            string file = Path.Combine(path, String.Format("{0}-{1}.bmp", fontFamily, c));
            string fontpath = Path.Combine(path, fontFamily);
            Image<Bgr, Byte> img = new Image<Bgr, byte>(400, 400);
            using (Graphics g = Graphics.FromImage(img.Bitmap)) {
                g.Clear(Color.Black);
                g.DrawString(c.ToString(), font, Brushes.White, 0, 0);
            }
            timer.Restart();
            var canny = img.Convert<Gray, Byte>().Canny(new Gray(100), new Gray(60));
            timer.StopAndSay("Canny");

            timer.Restart();
            List<Point> edge = new List<Point>();
            for (int y = 0; y < canny.Height; ++y) {
                for (int x = 0; x < canny.Width; ++x) {
                    if (canny[y, x].Intensity > 0) {
                        edge.Add(new Point(x, y));
                    }
                }
            }
            var sample = edge.Sample(samplecount);
            timer.StopAndSay("Sample");
            using (var sw = new StreamWriter(Path.Combine(path, String.Format("!Sample-{0}-{1}.txt", fontFamily, c)))) {
                foreach (var p in sample) {
                    sw.WriteLine("{0},{1}", p.X, p.Y);
                }
            }

            timer.Restart();
            double min, max;
            var norm = Jim.OCR.Algorithms.ShapeContext.Normalize(sample, out min, out max);
            timer.StopAndSay("Normalize");

            timer.Restart();
            var scs = new ImageShapeContext(sample);
            for (int i = 0; i < norm.Length; ++i) {
                scs.ShapeContests[i] = new Jim.OCR.Algorithms.ShapeContext(norm[i]);
                //var his = sc.Histogram.ToImage();
                var p = sample[i];
                //string hisfile = Path.Combine(fontpath, string.Format("[{0},{1}].bmp", p.X, p.Y));
                //his.Save(hisfile);
                img[p] = new Bgr(0, 0, 255);
            }
            timer.StopAndSay("ShapeContext");
            //foreach (var p in sample) {
            //    var sc = new ShapeContext(p, sample);
            //    var his = sc.Histogram.ToImage();
            //    string hisfile = Path.Combine(fontpath, string.Format("[{0},{1}].bmp", p.X, p.Y));
            //    his.Save(hisfile);
            //    img[p] = new Bgr(0, 0, 255);
            //}

            //var contours = img.Convert<Gray, Byte>().FindContours();
            //img.Draw(contours, new Bgr(0, 0, 255), new Bgr(0, 255, 0), 2, 1);

            //dfsContour(img, contours, 0, 2);
            //foreach (var ii in contours.) {
            //    //Console.WriteLine
            //    img[ii] = new Bgr(0, 0, 255);
            //}
            //img.Save(file);

            return scs;
        }
Beispiel #38
0
 private static void computeTemplateSC(int start, int count)
 {
     int s = 100;
     string[] templatefiles = Directory.GetFiles(@"D:\Play Data\my_template\", "*.jpg")
         .Skip(start).Take(count).ToArray();
     int templatecount = templatefiles.Length;
     Debug("解析{0}个模板--------------------------------------------", templatecount);
     MyTimer timer = new MyTimer();
     timer.Restart();
     for (int i = 0; i < templatecount; ++i) {
         string file = templatefiles[i];
         string filenameext = Path.GetFileName(file);
         string filename = Path.GetFileNameWithoutExtension(file);
         Image<Gray, Byte> img = new Image<Gray, byte>(file);
         var list = getEdge(img.Resize(2.5, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR)).Sample(s);
         if (i % 100 == 0)
             Debug("已完成{0}个", i);
         var sc = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC(list);
         using (var fs = new FileStream(Path.Combine(@"D:\Play Data\my_template_data\sc\", filename + ".sc"), FileMode.Create))
         {
             using (var bw = new BinaryWriter(fs)) {
                 for (int j = 0; j < s; ++j) {
                     for (int k = 0; k < 60; ++k) {
                         bw.Write(sc[j, k]);
                     }
                 }
             }
         }
     }
     Debug("模板计算完成,用时{0}ms.", timer.Stop());
 }
Beispiel #39
0
        private static void clusterSC()
        {
            int s = 100, K = 100;
            string[] templatefiles = Directory.GetFiles(@"D:\Play Data\my_template_data\sc\", "*.sc")
                .Take(180).ToArray();
            int templatecount = templatefiles.Length;
            #region 读取模板
            Debug("打开{0}个模板--------------------------------------------", templatecount);
            double[][] templates = new double[templatecount * s][];
            MyTimer timer = new MyTimer();
            timer.Restart();
            for (int i = 0; i < templatefiles.Length; ++i) {
                string file = templatefiles[i];
                string filename = Path.GetFileNameWithoutExtension(file);
                using (var fs = new FileStream(file, FileMode.Open)) {
                    using (var br = new BinaryReader(fs)) {
                        for (int j = 0; j < s; ++j) {
                            templates[i * s + j] = new double[60];
                            for (int k = 0; k < 60; ++k) {
                                templates[i * s + j][k] = br.ReadDouble();
                            }
                        }
                    }
                }
                if (i % 100 == 0)
                    Debug("已完成{0}个", i);
            }
            Debug("模板读取完成,用时{0}ms.", timer.Stop());
            #endregion

            #region 聚类
            timer.Restart();
            KMeans<double[]> kmeans = new KMeans<double[]>(templates, K,
                Jim.OCR.ShapeContext2D.ShapeContext.HistCost,
                scs => {
                    double[] scnew = new double[60];
                    for (int k = 0; k < 60; ++k) {
                        scnew[k] = scs.Average(sc => sc[k]);
                    }
                    return scnew;
                }
            );
            kmeans.MaxIterate = 100;
            var cluster = kmeans.Cluster();
            Debug("聚类完成,用时{0}ms.", timer.Stop());
            #endregion

            using (var fs = new FileStream(Path.Combine(@"D:\Play Data\my_template_data\sm-" + K, templatecount + ".sm"), FileMode.Create))
            {
                using (var bw = new BinaryWriter(fs)) {
                    for (int i = 0; i < K; ++i) {
                        for (int k = 0; k < 60; ++k) {
                            bw.Write(cluster[i].Center[k]);
                        }
                    }
                }
            }
        }
Beispiel #40
0
        private static void testMNIST2()
        {
            List<string> wrong = new List<string>();
            int testcount = 100, pos = 0;

            MyTimer timer = new MyTimer();

            foreach (var file in Directory.GetFiles(@"D:\Play Data\test", "*.bmp")) {
                if (pos == testcount) break;
                string filename = Path.GetFileNameWithoutExtension(file);
                int ans = int.Parse(filename.Split('-')[1]);
                timer.Restart();
                double[] results = new double[10];

                int scale = 8;
                for (int d = 0; d < 10; ++d) {
                    string template = Path.Combine(@"D:\Play Data\template", d + ".bmp");
                    var sc = new Jim.OCR.ShapeContext2D.ShapeContext(file, template);
                    sc.n_iter = 1;
                    //sc.showScale = 6;
                    sc.matchScale = 2.5;
                    sc.maxsamplecount = 100;
                    sc.display_flag = false;
                    sc.debug_flag = false;
                    sc.timer_flag = false;
                    double matchcost = sc.MatchFile();
                    results[d] = matchcost;// / sc.nsamp;
                }
                var sort = results.Select((c, i) => new { Cost = c, Digit = i }).OrderBy(v => v.Cost).ToArray();

                if (sort[0].Digit == ans) {
                    var fc = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    string s = String.Format("File:{0}-{1}ms-Right!\t", filename, timer.Stop());
                    for (int i = 0; i < 4; ++i) {
                        s += String.Format("{0}/{1:F4}, ", sort[i].Digit, sort[i].Cost);
                    }
                    Debug(s);
                    Console.ForegroundColor = fc;
                } else {
                    var fc = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Red;
                    //Debug("File:{0}-{1}ms-Opps!", filename, Timer.Stop());
                    wrong.Add(filename);
                    string s = String.Format("File:{0}-{1}ms-Wrong!\t", filename, timer.Stop());
                    for (int i = 0; i < 4; ++i) {
                        s += String.Format("{0}/{1:F4}, ", sort[i].Digit, sort[i].Cost);
                    }
                    Debug(s);
                    Console.ForegroundColor = fc;

                    #region 画对比图
                    //string dir = Path.Combine(@"D:\Play Data\output", filename);
                    //if (Directory.Exists(dir)) Directory.Delete(dir, true);
                    //Directory.CreateDirectory(dir);
                    //for (int d = 0; d < 10; ++d) {
                    //    var sc = isc1[d];
                    //    var sci = isc2[d];
                    //    var km = kms[d];
                    //    int ax = (int)sc.Points.Average(p => p.X),
                    //    ay = (int)sc.Points.Average(p => p.Y),
                    //    bx = (int)sci.Points.Average(p => p.X),
                    //    by = (int)sci.Points.Average(p => p.Y);
                    //    int dx = bx - ax,
                    //        dy = by - ay;

                    //    Image<Bgr, Byte> img = new Image<Bgr, byte>(28 * scale, 28 * scale);

                    //    Font fs = new Font("Arial", 18);
                    //    using (Graphics g = Graphics.FromImage(img.Bitmap)) {
                    //        g.Clear(Color.Black);

                    //        for (int j = 0; j < sci.Points.Count; ++j) {
                    //            int i = km.MatchPair[j + sc.Points.Count];
                    //            Point pb = sci.Points[j], pa = sc.Points[i];
                    //            pb.X -= dx;
                    //            pb.Y -= dy;
                    //            int r = 2;
                    //            g.DrawEllipse(Pens.Red, pa.X * scale - r, pa.Y * scale - r, r * 2 + 1, r * 2 + 1);
                    //            g.DrawEllipse(Pens.Green, pb.X * scale - r, pb.Y * scale - r, r * 2 + 1, r * 2 + 1);

                    //            g.DrawLine(Pens.Gray, new Point(pa.X * scale, pa.Y * scale), new Point(pb.X * scale, pb.Y * scale));
                    //        }
                    //        g.DrawString(results[d].ToString(), fs, Brushes.White, new PointF(0, 0));
                    //    }
                    //    img.Save(Path.Combine(dir, d + ".bmp"));
                    //}
                    #endregion
                }
                ++pos;
            }

            Debug("Wrong:{0}", wrong.Count);
            Debug("Wrong rate:{0:F2}%", 100.0 * wrong.Count / testcount);
        }
Beispiel #41
0
        private static void testMNIST()
        {
            var timer = new MyTimer();
            List<Point>[] Edges = new List<Point>[10];
            #region 准备边缘集合
            //Font standardFont = new Font("Arial", 20);
            //for (int i = 0; i < 10; ++i) {
            //    Image<Bgr, Byte> img = new Image<Bgr, byte>(28, 28);
            //    using (Graphics g = Graphics.FromImage(img.Bitmap)) {
            //        g.Clear(Color.Black);
            //        g.DrawString(i.ToString(), standardFont, Brushes.White, 0, 0);
            //    }

            //    Edges[i] = getEdge(img.Convert<Gray, Byte>());
            //    //img.Save(Path.Combine(@"D:\Play Data\", i + ".bmp"));
            //}

            for (int i = 0; i < 10; ++i) {
                string template = Path.Combine(@"D:\Play Data\template", i + ".bmp");
                Image<Gray, Byte> img = new Image<Gray, byte>(template);
                Edges[i] = getEdge(img);
            }

            #endregion

            List<string> wrong = new List<string>();
            int testcount = 100, pos = 0;
            foreach (var file in Directory.GetFiles(@"D:\Play Data\test", "*.bmp")) {
                if (pos == testcount) break;
                string filename = Path.GetFileNameWithoutExtension(file);
                int ans = int.Parse(filename.Split('-')[1]);
                timer.Restart();
                List<Point> edge = getEdge(new Image<Gray, byte>(file));
                ImageShapeContext[] isc1 = new ImageShapeContext[10];
                ImageShapeContext[] isc2 = new ImageShapeContext[10];
                KM[] kms = new KM[10];
                double[] results = new double[10];

                int scale = 8;
                for (int d = 0; d < 10; ++d) {
                    int samplecount = Math.Min(edge.Count, Edges[d].Count);
                    var sc = createISC(edge, samplecount);
                    var sci = createISC(Edges[d], samplecount);
                    var scm = new ShapeContextMatching(sc.ShapeContests, sci.ShapeContests);
                    scm.BuildCostGraph();
                    var km = scm.Match();
                    isc1[d] = sc;
                    isc2[d] = sci;
                    kms[d] = km;
                    results[d] = (double)km.MatchResult / samplecount;
                }
                var sort = results.Select((c, i) => new { Cost = c, Digit = i }).OrderBy(v => v.Cost).ToArray();

                if (sort[0].Digit == ans) {
                    var fc = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    string s = String.Format("File:{0}-{1}ms-Right!\t", filename, timer.Stop());
                    for (int i = 0; i < 4; ++i) {
                        s += String.Format("{0}/{1:F4}, ", sort[i].Digit, sort[i].Cost);
                    }
                    Debug(s);
                    Console.ForegroundColor = fc;
                } else {
                    var fc = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Red;
                    wrong.Add(filename);
                    string s = String.Format("File:{0}-{1}ms-Wrong!", filename, timer.Stop());
                    for (int i = 0; i < 5; ++i) {
                        s += String.Format("{0}/{1:F2}, ", sort[i].Digit, sort[i].Cost);
                    }
                    Debug(s);
                    Console.ForegroundColor = fc;

                    string dir = Path.Combine(@"D:\Play Data\output", filename);
                    if (Directory.Exists(dir)) Directory.Delete(dir, true);
                    Directory.CreateDirectory(dir);
                    for (int d = 0; d < 10; ++d) {
                        var sc = isc1[d];
                        var sci = isc2[d];
                        var km = kms[d];
                        int ax = (int)sc.Points.Average(p => p.X),
                        ay = (int)sc.Points.Average(p => p.Y),
                        bx = (int)sci.Points.Average(p => p.X),
                        by = (int)sci.Points.Average(p => p.Y);
                        int dx = bx - ax,
                            dy = by - ay;

                        Image<Bgr, Byte> img = new Image<Bgr, byte>(28 * scale, 28 * scale);

                        Font fs = new Font("Arial", 18);
                        using (Graphics g = Graphics.FromImage(img.Bitmap)) {
                            g.Clear(Color.Black);

                            for (int j = 0; j < sci.Points.Count; ++j) {
                                int i = km.MatchPair[j + sc.Points.Count];
                                Point pb = sci.Points[j], pa = sc.Points[i];
                                pb.X -= dx;
                                pb.Y -= dy;
                                int r = 2;
                                g.DrawEllipse(Pens.Red, pa.X * scale - r, pa.Y * scale - r, r * 2 + 1, r * 2 + 1);
                                g.DrawEllipse(Pens.Green, pb.X * scale - r, pb.Y * scale - r, r * 2 + 1, r * 2 + 1);

                                g.DrawLine(Pens.Gray, new Point(pa.X * scale, pa.Y * scale), new Point(pb.X * scale, pb.Y * scale));
                            }
                            g.DrawString(results[d].ToString(), fs, Brushes.White, new PointF(0, 0));
                        }
                        img.Save(Path.Combine(dir, d + ".bmp"));
                    }
                }
                ++pos;
            }

            Debug("Wrong:{0}", wrong.Count);
            Debug("Wrong rate:{0:F2}%", 100.0 * wrong.Count / testcount);
        }
Beispiel #42
0
        private static void testCluter()
        {
            int ss = 100, sq = 100, k = 10, m = 10; // 采样数,G取前k,S取前m
            int randcount = 5, randtake = 10, randselect = 3;
            var timer = new MyTimer();
            var templatefiles = Directory.GetFiles(@"D:\Play Data\字符模板");
            int templatecount = templatefiles.Length;
            var templateChars = new string[templatecount];
            var templatePoints = new Vector2[templatecount][];
            //var templatesc = new double[templatecount][,];
            var templatesc = new double[templatecount][][];
            #region 计算模板的SC
            for (int f = 0; f < templatecount; ++f) {
                string file = templatefiles[f], filename = Path.GetFileNameWithoutExtension(file);
                using (Image<Gray, Byte> img = new Image<Gray, byte>(file)) {
                    var samples = getEdge(img).Sample(ss);
                    templatesc[f] = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC2(samples);
                    templatePoints[f] = samples.Select(p => new Vector2(p.X, p.Y)).ToArray();
                }
                templateChars[f] = filename;
                Console.Write(filename);
            }
            Console.WriteLine();
            Debug("模板读取完成");
            #endregion

            #region 处理字符
            foreach (string file in Directory.GetFiles(@"D:\Play Data\字符")) {
                string filename = Path.GetFileNameWithoutExtension(file);
                if (filename != "AB") continue;
                timer.Restart();
                Image<Bgr, Byte> img = new Image<Bgr, Byte>(file);
                var samples = getEdge(img.Convert<Gray, Byte>()).Sample(sq);
                //double[,] SCQ = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC(samples);
                double[][] SCQ = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC2(samples);
                var Q_Points = samples.Select(p => new Vector2(p.X, p.Y)).ToArray();
                var mmg = img.Convert<Bgr, Byte>();
                Graphics g = Graphics.FromImage(mmg.Bitmap);
                Q_Points.ToList().ForEach(v => { mmg[(int)v.Y, (int)v.X] = new Bgr(0, 0, 255); });

                var point_distance = new ValueIndexPair<double>[sq][];
                #region 计算采样点之间的距离
                for (int i = 0; i < sq; ++i) {
                    double xi = Q_Points[i].X, yi = Q_Points[i].Y;
                    point_distance[i] = new ValueIndexPair<double>[sq];
                    for (int j = 0; j < sq; ++j) {
                        double xj = Q_Points[j].X, yj = Q_Points[j].Y;
                        point_distance[i][j] = new ValueIndexPair<double> {
                            Value = Math.Sqrt((xi - xj) * (xi - xj) + (yi - yj) * (yi - yj)),
                            Index = j
                        };
                    }
                    Array.Sort(point_distance[i], (a, b) => a.Value.CompareTo(b.Value));
                }
                #endregion
                var randpoints = new int[randcount][];
                #region 随机取randcount个点,并在其周围randtake个点中取randselect个
                for (int i = 0; i < randcount; ++i) {
                    int pi = rand.Next(Q_Points.Length);
                    var p = Q_Points[pi];
                    mmg.Draw(new CircleF(new PointF((float)p.X, (float)p.Y), 2), new Bgr(255, 0, 0), 1);

                    randpoints[i] = new int[randselect];
                    bool[] vi = Utils.InitArray<bool>(randtake, false);
                    for (int cnt = 0; cnt < randselect; ) {
                        int rnd = rand.Next(randtake);
                        if (!vi[rnd]) {
                            vi[rnd] = true;
                            randpoints[i][cnt++] = rnd;
                        }
                    }
                    for (int ppp = 0; ppp < randselect; ++ppp) {
                        var pt = Q_Points[point_distance[pi][randpoints[i][ppp]].Index];
                        //g.DrawString(i.ToString(), new Font("Arial", 7), new SolidBrush(Color.FromArgb(0, 128, 0)), new PointF((float)pt.X, (float)pt.Y));
                    }
                }
                #endregion
                #region 为这randcount组RSC分别选最好的模板
                var rscmatch = new Tuple<int, double, Vector2>[randcount]; // <Si, d, L>
                for (int rc = 0; rc < randcount; ++rc) {
                    var rsc_matches = new Tuple<double, Vector2>[templatecount]; // <d, L>
                    for (int i = 0; i < templatecount; ++i) {
                        #region 拷贝出一个rsc来
                        var rsc = new double[randselect][];
                        for (int j = 0; j < randselect; ++j) {
                            rsc[j] = new double[60];
                            Array.Copy(SCQ[randpoints[rc][j]], rsc[j], 60);
                        }
                        #endregion
                        var costmat = Jim.OCR.ShapeContext2D.ShapeContext.HistCost2(rsc, templatesc[i]);
                        var matches = costmat.Select(
                            row => row.Select((d, c) => new ValueIndexPair<double> { Value = d, Index = c })
                                      .OrderBy(d => d.Value).First()).ToArray();
                        Vector2 L = Vector2.Zero;
                        double M = 0;
                        for (int j = 0; j < randselect; ++j) {
                            int u = randpoints[rc][j], mu = matches[j].Index;
                            double d = matches[j].Value;
                            Vector2 pu = Q_Points[u], pmu = templatePoints[i][mu];
                            M += (1 - d);
                            L += (1 - d) * (pu - pmu);
                        }
                        L /= M;

                        rsc_matches[i] = new Tuple<double, Vector2> {
                            First = matches.Sum(r => r.Value),
                            Second = L
                        };
                    }
                    var best_template = rsc_matches.Select((mt, i) => new { Match = mt, i })
                                                   .OrderBy(t => t.Match.First)
                                                   .First();
                    rscmatch[rc] = new Tuple<int, double, Vector2> {
                        First = best_template.i,
                        Second = best_template.Match.First,
                        Third = best_template.Match.Second
                    };

                    string label = templateChars[best_template.i];
                    g.DrawString(label, new Font("Arial", 48), Brushes.Green,
                                 new PointF((float)best_template.Match.Second.X, (float)best_template.Match.Second.Y));
                }
                #endregion

                //Font f = new Font("Arial", 12);
                //var G = new Tuple<int, int, double>[templatecount][]; // <u, m(u), d>
                //#region 为每个Si挑选合适的Gi
                //{
                //    var costmats = new double[templatecount][,];
                //    for (int i = 0; i < templatecount; ++i) {
                //        double[,] SCi = templatesc[i];
                //        costmats[i] = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(SCQ, SCi);
                //        G[i] = new Tuple<int, int, double>[sq * ss];
                //        for (int u = 0; u < sq; ++u) {
                //            for (int j = 0; j < ss; ++j) {
                //                G[i][u * ss + j] = new Tuple<int, int, double> {
                //                    First = u,
                //                    Second = j,
                //                    Third = costmats[i][u, j]
                //                };
                //            }
                //        }
                //        Array.Sort(G[i], (da, db) => da.Third.CompareTo(db.Third));
                //    }
                //}
                //#endregion
                //var d_Q_S = new double[templatecount];
                //#region 求出每个Si和Q的d(Q, Si)
                //{
                //    for (int i = 0; i < templatecount; ++i) {
                //        var Gi = G[i].Take(k);
                //        foreach (var g in Gi) {
                //            int u = g.First, mu = g.Second;
                //            double d = g.Third;
                //            double Nu = G.Average(gi => gi.First(t => t.First == u).Third);
                //            d_Q_S[i] += d / Nu;
                //        }
                //        d_Q_S[i] /= k;
                //    }
                //}
                //#endregion
                //var firstmG = new Tuple<Tuple<int, int, double>[], double, int>[m]; // <G, d, i> <=> <<u, m(u), d>[], d, i>
                //#region 根据d(Q, Si)截取前20个最好的Gi
                //{
                //    var firstmdQS = d_Q_S.Select((d, i) => new ValueIndexPair<double> { Value = d, Index = i })
                //        .OrderBy(p => p.Value)
                //        .Take(firstmG.Length).ToArray();
                //    for (int p = 0; p < firstmG.Length; ++p) {
                //        double d = firstmdQS[p].Value;
                //        int i = firstmdQS[p].Index;
                //        firstmG[p] = new Tuple<Tuple<int, int, double>[], double, int> {
                //            First = G[i].Take(k).ToArray(),
                //            Second = d,
                //            Third = i
                //        };
                //    }
                //}
                //#endregion
                //#region 计算每个G的位置
                //var L = new Vector2[m];
                //{
                //    for (int i = 0; i < m; ++i) {
                //        L[i] = Vector2.Zero;
                //        double Mi = 0;
                //        var Gi = firstmG[i];
                //        foreach (var u_mu_d in Gi.First) {
                //            int u = u_mu_d.First, mu = u_mu_d.Second;
                //            double d = u_mu_d.Third;
                //            Vector2 pu = Q_Points[u], pmu = templatePoints[Gi.Third][mu];
                //            L[i] += (1 - d) * (pu - pmu);
                //            Mi += (1 - d);
                //        }
                //        L[i] /= Mi;

                //        g.DrawString(templateChars[Gi.Third], new Font("Arial", 12), Brushes.Green,
                //                     new PointF((float)L[i].X, (float)L[i].Y));
                //    }
                //}
                //#endregion
                mmg.Save(Path.Combine(@"D:\Play Data\测试玩意", filename + ".bmp"));
                Debug("{0}\t用时{1}ms.", filename, timer.Stop());
            }
            #endregion
        }
Beispiel #43
0
        private static void testCAPTCHA()
        {
            var timer = new MyTimer();
            int s = 100, K = 100, m = 180;

            string[] templatefiles = Directory.GetFiles(@"D:\Play Data\my_template_data\scq-" + K + "-" + m, "*.scq")
                .Take(10000).ToArray();
            #region 打开量化的模板
            int templatecount = templatefiles.Length;
            Debug("打开{0}个量化模板----------------------------------------", templatecount);
            timer.Restart();
            int[][] templatehistograms = new int[templatecount][];
            string[] templatechars = new string[templatecount];
            for (int f = 0; f < templatecount; ++f) {
                string file = templatefiles[f];
                string filename = Path.GetFileNameWithoutExtension(file);
                templatechars[f] = filename.Split('-')[1];
                templatehistograms[f] = new int[K];
                using (var fs = new FileStream(file, FileMode.Open)) {
                    using (var br = new BinaryReader(fs)) {
                        for (int i = 0; i < K; ++i) {
                            templatehistograms[f][i] = br.ReadInt32();
                        }
                    }
                }
            }
            Debug("打开完成,用时{0}ms.", timer.Stop());

            #endregion

            #region 打开Shapeme
            Debug("打开{0}个Shapeme.", K);
            timer.Restart();
            double[][] shapemes = new double[K][];
            using (var fs = new FileStream(Path.Combine(@"D:\Play Data\my_template_data\sm-" + K, m + ".sm"), FileMode.Open)) {
                using (var br = new BinaryReader(fs)) {
                    for (int i = 0; i < K; ++i) {
                        shapemes[i] = new double[60];
                        for (int k = 0; k < 60; ++k) {
                            shapemes[i][k] = br.ReadDouble();
                        }
                    }
                }
            }

            Debug("Shapeme读取完成,用时{0}ms.", timer.Stop());
            #endregion

            #region 识别
            foreach (var challengeFile in Directory.GetFiles(@"D:\Play Data\字符\", "*.jpg")) {
                timer.Restart();
                string filename = Path.GetFileNameWithoutExtension(challengeFile);
                Image<Gray, Byte> img = new Image<Gray, byte>(challengeFile);
                var mmp = img.Convert<Bgr, Byte>();
                Graphics g = Graphics.FromImage(mmp.Bitmap);
                double width_height_ratio = (double)img.Width / img.Height;
                int sq = (int)(s * width_height_ratio * 1.2);
                int randcount = (int)(width_height_ratio * 2);
                //int windowcount = (int)(width_height_ratio * 2),
                //    windowstep = (int)(img.Width / windowcount),
                //    windowwidth = (int)(img.Width * 1.5 / windowcount);
                //int maxrandcount = randcount * 3;
                //Console.WriteLine("宽高比{0:F2},采样{1},随机数{2},随机上限{3}.",
                //    width_height_ratio, sq, randcount, maxrandcount);
                int slice = 16,//(int)(width_height_ratio * width_height_ratio),
                    overlap = 4,
                    windowcount = 7;//slice - (overlap - 1);
                double slice_width = (double)img.Width / slice;
                Console.WriteLine("宽高比{0:F2},切片数{1},切片宽度{2:F2},窗口数{3}.",
                    width_height_ratio, slice, slice_width, windowcount);
                var edge = getEdge(img).Sample(sq);
                foreach (var p in edge) {
                    mmp[p] = new Bgr(0, 0, 127);
                }
                bool[] edge_vi = Utils.InitArray(sq, false);
                #region 计算采样点之间的距离
                ValueIndexPair<double>[][] edgedists = new ValueIndexPair<double>[sq][];
                for (int i = 0; i < sq; ++i) {
                    edgedists[i] = new ValueIndexPair<double>[sq];
                    for (int j = 0; j < sq; ++j) {
                        double xi = edge[i].X, yi = edge[i].Y,
                               xj = edge[j].X, yj = edge[j].Y;
                        double d = Math.Sqrt((xi - xj) * (xi - xj) + (yi - yj) * (yi - yj));
                        edgedists[i][j] = new ValueIndexPair<double> { Value = d, Index = j };
                    }
                    Array.Sort(edgedists[i], (a, b) => a.Value.CompareTo(b.Value));
                }
                #endregion

                var charlist = new List<Tuple<string, int, PointF>>(); // <ch, count, center>
                //for (int rc = 0, rt = 0; rc < randcount && rt < maxrandcount; ++rt) {
                //    #region 随机取一个中心点,并且取离他近的点计算形状上下文
                //int center = rand.Next(sq);
                //if (edge_vi[center]) continue;
                //else rc++;
                //rc++;
                //var nearby = new List<Point>();
                //foreach (var pair in edgedists[center].Take((int)(s * 1.5))) {
                //    nearby.Add(edge[pair.Index]);
                //    edge_vi[pair.Index] = true;
                //}
                //nearby = nearby.Sample(s);
                for (int wd = 0; wd < windowcount; ++wd) {
                    #region 滑动窗口位置
                    //int window_center = wd * windowstep + (windowwidth / 2);
                    double window_center = (wd * 2 + overlap / 2.0) * slice_width;
                    g.DrawLine(Pens.Green, (float)window_center, 0, (float)window_center, img.Height);
                    var nearby = edge.Where(p => Math.Abs(p.X - window_center) < img.Height)
                                     .OrderBy(p => Math.Abs(p.X - window_center))
                                     .Take((int)(s * 1.2))
                                     .ToList().Sample(s);
                    if (nearby.Average(p => Math.Abs(p.X - window_center)) > img.Height) continue;
                    var sc = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC2(nearby);

                    #endregion

                    #region 对待测图的形状上下文进行量化

                    int[] histogram = new int[K];
                    for (int i = 0; i < s; ++i) {
                        double[] ds = new double[K];
                        for (int j = 0; j < K; ++j)
                            ds[j] = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(sc[i], shapemes[j]);
                        int id = ds.Select((v, idx) => new ValueIndexPair<double> { Value = v, Index = idx })
                            .OrderBy(p => p.Value)
                            .First().Index;
                        ++histogram[id];
                    }

                    #endregion

                    #region 计算量化后的比较距离

                    double[] dists = new double[templatecount];
                    for (int i = 0; i < templatecount; ++i) {
                        //dists[i] = Jim.OCR.ShapeContext2D.ShapeContext.ChiSquareDistance(histogram, templatehistograms[i]);
                        dists[i] = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(
                            histogram.Select(d => (double)d).ToArray(),
                            templatehistograms[i].Select(d => (double)d).ToArray());
                    }

                    #endregion

                    #region 对结果进行排序和统计

                    var arr = dists.Select((d, i) => new ValueIndexPair<double> { Value = d, Index = i })
                        .OrderBy(p => p.Value)
                        .Select(p => new { Distance = p.Value, Char = templatechars[p.Index] })
                        .Where(p => "0123456789".IndexOf(p.Char) != -1)
                        .ToArray();
                    Dictionary<string, int> matchcount = new Dictionary<string, int>();
                    int knn = 10;
                    foreach (var pair in arr.Take(knn)) {
                        string ch = pair.Char;
                        matchcount[ch] = matchcount.ContainsKey(ch) ? matchcount[ch] + 1 : 1;
                    }
                    var match = matchcount.Select(pair => new { Count = pair.Value, Ch = pair.Key })
                        .Where(v => v.Count > 0)
                        .OrderByDescending(v => v.Count).ToArray();
                    var firstmatch = match[0];
                    PointF newcenter = new PointF(nearby.Average(p => (float)p.X), nearby.Average(p => (float)p.Y));
                    charlist.Add(new Tuple<string, int, PointF> {
                        First = firstmatch.Ch,
                        Second = firstmatch.Count,
                        Third = newcenter
                    });

                    #endregion
                }
                foreach (var tp in charlist) {
                    string ch = tp.First;
                    int acc = tp.Second;
                    PointF center = tp.Third;
                    //g.DrawString(num.ToString(), new Font("Arial", 24), new SolidBrush(Color.FromArgb(40 + 20 * acc, 0, 0)),
                    //            new PointF(center.X - 12, center.Y - 12));
                    g.DrawString(ch, new Font("Arial", 24), (acc >= 5 ? Brushes.Red : Brushes.DarkGreen),
                                new PointF(center.X - 12, center.Y - 12));
                }
                mmp.Save(Path.Combine(@"D:\Play Data\测试玩意\", filename + ".jpg"));
                Debug("{0}-{1}ms", filename, timer.Stop());

            }
            #endregion
        }
Beispiel #44
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            switch (version)
            {
                case 0:
                    mOwner = reader.ReadMobile();
                    mKeyword = reader.ReadString();
                    mPlayers = new List<PlayerMobile>();
                    myTimer = new MyTimer(this);
                    myTimer.Start();
                    if (Backpack == null) EquipItem(new StewardBackpack(this));
                    break;
            }
        }
Beispiel #45
0
    private void InitBackgroundWorker()
    {
        ExiftoolBackground = new BackgroundWorker();
        RTBackground = new BackgroundWorker();
        SaveBackground = new BackgroundWorker();
        OpenBackground = new BackgroundWorker();
        BackCounter = new MyTimer(new GLib.TimeoutHandler(BackCounter_Tick));
        CalcWorker = new List<BackgroundWorker>();
        ExifWorker = new BackgroundWorker();
        XMPWorker = new BackgroundWorker();

        BackCounter.Time = 1000;

        ProgressFileWatcher = new FileSystemWatcher();
        ProgressFileWatcher.Created += new FileSystemEventHandler(ProgressFileWatcher_Created);
        
        ExiftoolBackground.DoWork += new DoWorkEventHandler(ExiftoolBackground_DoWork);
        ExiftoolBackground.ProgressChanged += new ProgressChangedEventHandler(ExiftoolBackground_ProgressChanged);
        ExiftoolBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(ExiftoolBackground_RunWorkerCompleted);
        ExiftoolBackground.WorkerReportsProgress = true;
        ExiftoolBackground.WorkerSupportsCancellation = true;

        RTBackground.DoWork += new DoWorkEventHandler(RTBackground_DoWork);
        RTBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RTBackground_RunWorkerCompleted);
        RTBackground.WorkerSupportsCancellation = true;

        SaveBackground.DoWork += new DoWorkEventHandler(SaveBackground_DoWork);
        SaveBackground.ProgressChanged += new ProgressChangedEventHandler(General_ProgressChanged);
        SaveBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(SaveBackground_RunWorkerCompleted);
        SaveBackground.WorkerReportsProgress = true;
        SaveBackground.WorkerSupportsCancellation = true;

        OpenBackground.DoWork += new DoWorkEventHandler(OpenBackground_DoWork);
        OpenBackground.ProgressChanged += new ProgressChangedEventHandler(General_ProgressChanged);
        OpenBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OpenBackground_RunWorkerCompleted);
        OpenBackground.WorkerReportsProgress = true;
        OpenBackground.WorkerSupportsCancellation = true;

        XMPWorker.DoWork += new DoWorkEventHandler(XMPWorker_DoWork);
        XMPWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(XMPWorker_RunWorkerCompleted);
    }
Beispiel #46
0
        private static void fastPruningWithShapeme()
        {
            var timer = new MyTimer();
            int s = 100, K = 100, m = 100;

            string[] templatefiles = Directory.GetFiles(@"D:\Play Data\train_data\scq-" + K + "-" + m, "*.scq")
                .Take(20000).ToArray();
            #region 打开量化的模板
            int templatecount = templatefiles.Length;
            Debug("打开{0}个量化模板----------------------------------------", templatecount);
            timer.Restart();
            int[][] templatehistograms = new int[templatecount][];
            int[] templatenums = new int[templatecount];
            for (int f = 0; f < templatecount; ++f) {
                string file = templatefiles[f];
                string filename = Path.GetFileNameWithoutExtension(file);
                templatenums[f] = int.Parse(filename.Split('-')[1]);
                templatehistograms[f] = new int[K];
                using (var fs = new FileStream(file, FileMode.Open)) {
                    using (var br = new BinaryReader(fs)) {
                        for (int i = 0; i < K; ++i) {
                            templatehistograms[f][i] = br.ReadInt32();
                        }
                    }
                }
            }
            Debug("打开完成,用时{0}ms.", timer.Stop());

            #endregion

            #region 打开Shapeme
            Debug("打开{0}个Shapeme.", K);
            timer.Restart();
            double[][] shapemes = new double[K][];
            using (var fs = new FileStream(Path.Combine(@"D:\Play Data\train_data\sm-" + K, m + ".sm"), FileMode.Open)) {
                using (var br = new BinaryReader(fs)) {
                    for (int i = 0; i < K; ++i) {
                        shapemes[i] = new double[60];
                        for (int k = 0; k < 60; ++k) {
                            shapemes[i][k] = br.ReadDouble();
                        }
                    }
                }
            }

            Debug("Shapeme读取完成,用时{0}ms.", timer.Stop());
            #endregion

            string[] testfiles = Directory.GetFiles(@"D:\Play Data\test\", "*.bmp")
                .Take(1000).ToArray();
            #region 测试
            int testcase = testfiles.Length, acc = 0;
            Debug("为{0}个对象寻找候选模板------------------------------------------", testcase);
            foreach (var file in testfiles) {
                timer.Restart();
                #region 计算待测图的形状上下文
                string filenameext = Path.GetFileName(file);
                string filename = Path.GetFileNameWithoutExtension(file);
                int thisnum = int.Parse(filename.Split('-')[1]);
                Image<Gray, Byte> img = new Image<Gray, byte>(file);
                var list = getEdge(img.Resize(2.5, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR)).Sample(s);
                var sc = Jim.OCR.ShapeContext2D.ShapeContext.ComputeSC2(list);
                #endregion

                #region 对待测图的形状上下文进行量化
                int[] histogram = new int[K];
                for (int i = 0; i < s; ++i) {
                    double[] ds = new double[K];
                    for (int j = 0; j < K; ++j)
                        ds[j] = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(sc[i], shapemes[j]);
                    int id = ds.Select((v, idx) => new ValueIndexPair<double> { Value = v, Index = idx })
                                  .OrderBy(p => p.Value)
                                  .First().Index;
                    ++histogram[id];
                }
                #endregion

                #region 计算量化后的比较距离
                double[] dists = new double[templatecount];
                for (int i = 0; i < templatecount; ++i) {
                    dists[i] = Jim.OCR.ShapeContext2D.ShapeContext.ChiSquareDistance(histogram, templatehistograms[i]);
                    //dists[i] = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(histogram.Cast<double>().ToArray(), templatehistograms[i].Cast<double>().ToArray());
                }
                #endregion

                #region 对结果进行排序和统计
                var arr = dists.Select((d, i) => new ValueIndexPair<double> { Value = d, Index = i })
                                 .OrderBy(p => p.Value)
                                 .Select(p => new { Distance = p.Value, Num = templatenums[p.Index] })
                                 .ToArray();
                int[] matchcount = new int[10];
                int knn = 10;
                foreach (var pair in arr.Take(knn)) {
                    int num = pair.Num;
                    matchcount[num]++;
                }
                var match = matchcount.Select((val, i) => new { Count = val, Num = i })
                                      .Where(v => v.Count > 0)
                                      .OrderByDescending(v => v.Count).ToArray();
                #endregion

                int firstmatch = match[0].Num;
                var fc = Console.ForegroundColor;
                Console.ForegroundColor = firstmatch == thisnum ? ConsoleColor.Green : ConsoleColor.Red;
                string info = String.Format("{0} {1}ms - {2}\t", filename, timer.Stop(), (firstmatch == thisnum ? "Right" : "Wrong"));
                foreach (var ma in match.Take(4)) {
                    info += String.Format("{0}/{1}\t", ma.Num, ma.Count);
                }
                Debug(info);
                Console.ForegroundColor = fc;

                if (firstmatch == thisnum) {
                    ++acc;
                }
            }
            Debug("测试用例:{0}。正确率{1}。", testcase, acc);
            #endregion
        }
Beispiel #47
0
        private Image<Bgr, Byte> kmeans()
        {
            int trainSampleCount = 1500;
            int sigma = 60;
            Matrix<float> trainData = new Matrix<float>(trainSampleCount, 2);
            Matrix<float> trainData1 = trainData.GetRows(0, trainSampleCount / 3, 1);
            trainData1.GetCols(0, 1).SetRandNormal(new MCvScalar(100), new MCvScalar(sigma));
            trainData1.GetCols(1, 2).SetRandNormal(new MCvScalar(300), new MCvScalar(sigma));

            Matrix<float> trainData2 = trainData.GetRows(trainSampleCount / 3, 2 * trainSampleCount / 3, 1);
            trainData2.SetRandNormal(new MCvScalar(400), new MCvScalar(sigma));

            Matrix<float> trainData3 = trainData.GetRows(2 * trainSampleCount / 3, trainSampleCount, 1);
            trainData3.GetCols(0, 1).SetRandNormal(new MCvScalar(300), new MCvScalar(sigma));
            trainData3.GetCols(1, 2).SetRandNormal(new MCvScalar(100), new MCvScalar(sigma));

            PointF[] points = new PointF[trainSampleCount];
            for (int i = 0; i < points.Length; ++i) {
                points[i] = new PointF(trainData[i, 0], trainData[i, 1]);
            }
            var km = new KMeans<PointF>(points, 3,
                (a, b) => ((a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y)),
                list => new PointF(list.Average(p => p.X), list.Average(p => p.Y))
            );
            int it = 0;
            MyTimer timer = new MyTimer();
            timer.Restart();
            //var cluster = km.Cluster();
            var cluster = km.AnnealCluster(
                (a, b) => new PointF(a.X + b.X, a.Y + b.Y),
                (a, b) => new PointF(a.X - b.X, a.Y - b.Y),
                (p, v) => new PointF((float)(p.X / v), (float)(p.Y / v)),
                out it);
            var time = timer.Stop();
            this.Text = String.Format("n={0}, k={1}, time={2}ms, iter={3}.", trainSampleCount, 3, time, it);

            Image<Bgr, Byte> img = new Image<Bgr, byte>(500, 500);
            for (int y = 0; y < 500; ++y) {
                for (int x = 0; x < 500; ++x) {
                    double d0 = (x - cluster[0].Center.X) * (x - cluster[0].Center.X)
                              + (y - cluster[0].Center.Y) * (y - cluster[0].Center.Y);
                    double d1 = (x - cluster[1].Center.X) * (x - cluster[1].Center.X)
                              + (y - cluster[1].Center.Y) * (y - cluster[1].Center.Y);
                    double d2 = (x - cluster[2].Center.X) * (x - cluster[2].Center.X)
                              + (y - cluster[2].Center.Y) * (y - cluster[2].Center.Y);
                    Bgr color = new Bgr(0, 0, 0);
                    if (d0 < d1 && d0 < d2) {
                        color = new Bgr(20, 0, 0);
                    }
                    if (d1 < d0 && d1 < d2) {
                        color = new Bgr(0, 20, 0);
                    }
                    if (d2 < d0 && d2 < d1) {
                        color = new Bgr(0, 0, 20);
                    }
                    img[y, x] = color;
                }
            }
            Bgr[] colors = new[] { new Bgr(128, 0, 0), new Bgr(0, 128, 0), new Bgr(0, 0, 128) };
            Bgr[] centers = new[] { new Bgr(255, 0, 0), new Bgr(0, 255, 0), new Bgr(0, 0, 255) };
            for (int i = 0; i < 3; ++i) {
                foreach (var p in cluster[i]) {
                    img.Draw(new CircleF(p, 2), colors[i], 1);
                }
                img.Draw(new CircleF(cluster[i].Center, 5), centers[i], 3);
            }
            img.Draw(new CircleF(new PointF(100, 300), sigma), new Bgr(128, 128, 128), 2);
            img.Draw(new CircleF(new PointF(100, 300), 3), new Bgr(128, 128, 128), 2);
            img.Draw(new CircleF(new PointF(300, 100), sigma), new Bgr(128, 128, 128), 2);
            img.Draw(new CircleF(new PointF(300, 100), 3), new Bgr(128, 128, 128), 2);
            img.Draw(new CircleF(new PointF(400, 400), sigma), new Bgr(128, 128, 128), 2);
            img.Draw(new CircleF(new PointF(400, 400), 3), new Bgr(128, 128, 128), 2);

            return img;
        }
Beispiel #48
0
 public BaseMiningRocks(Ores oreType)
     : base(Utility.RandomBool() ? 0x1367 : Utility.RandomList(0x1363, 0x1364, 0x1367, 0x136A, 0x136D))
 {
     mOreType = oreType;
     OrePresent = true;
     Movable = false;
     Stackable = false;
     myTimer = new MyTimer(this);
 }
Beispiel #49
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
                case 0:
                {
                    mOreType = (Ores) reader.ReadInt();
                    OrePresent = true;
                    myTimer = new MyTimer(this);
                    break;
                }
            }
        }
        /// <summary>
        /// Called when [start].
        /// </summary>
        /// <param name="args">The arguments.</param>
        protected override void OnStart(string[] args)
        {
            //Creates logger
            eventLogger = new System.Diagnostics.EventLog();
            this.AutoLog = false;
            if (!System.Diagnostics.EventLog.SourceExists("QuizSource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "QuizSource", "QuizLog");
            }
            eventLogger.Source = "QuizSource";
            eventLogger.Log = "QuizLog";

            eventLogger.WriteEntry("go");
            //Create a thead for getting new connections
            QuizService.MyTimer listenThread = new MyTimer(0, listen, new object());
            eventLogger.WriteEntry("after");
        }
Beispiel #51
0
        private static void MatchShapeContext(string path, string fa, string fb, char c)
        {
            MyTimer timer = new MyTimer();
            Console.WriteLine("Doing...{0}", c);
            var sca = CreateShapeContext(path, fa, 100, c);
            var scb = CreateShapeContext(path, fb, 100, c);

            var match = new ShapeContextMatching(sca.ShapeContests, scb.ShapeContests);

            timer.Restart();
            match.BuildCostGraph();
            timer.StopAndSay("Build Graph");

            timer.Restart();
            var km = match.Match();
            timer.StopAndSay("Match");
            Console.WriteLine("Match Result:{0}", km.MatchResult);

            int ax = (int)sca.Points.Average(p => p.X),
                ay = (int)sca.Points.Average(p => p.Y),
                bx = (int)scb.Points.Average(p => p.X),
                by = (int)scb.Points.Average(p => p.Y);
            int dx = bx - ax,
                dy = by - ay;
            int scale = 4;
            Image<Bgr, Byte> img = new Image<Bgr, byte>(400 * scale, 400 * scale);
            string scdir = Path.Combine(path, c.ToString());
            if (Directory.Exists(scdir)) Directory.Delete(scdir, true);
            Directory.CreateDirectory(scdir);
            Font fs = new Font("Arial", 12);
            using (Graphics g = Graphics.FromImage(img.Bitmap)) {
                g.Clear(Color.Black);

                Font font1 = new Font(fa, 240 * scale);
                Font font2 = new Font(fb, 240 * scale);
                g.DrawString(c.ToString(), font1, new SolidBrush(Color.FromArgb(30, 255, 0, 0)), new Point(0, 0));
                g.DrawString(c.ToString(), font2, new SolidBrush(Color.FromArgb(30, 0, 255, 0)), new Point(-dx * scale, -dy * scale));

                for (int j = 0; j < scb.Points.Count; ++j) {
                    int i = km.MatchPair[j + sca.Points.Count];
                    Point pb = scb.Points[j], pa = sca.Points[i];
                    pb.X -= dx;
                    pb.Y -= dy;
                    int r = 3;
                    g.DrawEllipse(Pens.Red, pa.X * scale - r, pa.Y * scale - r, r * 2 + 1, r * 2 + 1);
                    g.DrawEllipse(Pens.Green, pb.X * scale - r, pb.Y * scale - r, r * 2 + 1, r * 2 + 1);

                    g.DrawLine(Pens.Gray, new Point(pa.X * scale, pa.Y * scale), new Point(pb.X * scale, pb.Y * scale));

                    Point ps = new Point(pa.X * scale, pa.Y * scale);
                    g.DrawString(i.ToString(), fs, Brushes.White, ps);

                    string hisa = Path.Combine(scdir, String.Format("{0}-{1}.bmp", i, fa));
                    string hisb = Path.Combine(scdir, String.Format("{0}-{1}.bmp", i, fb));
                    sca.ShapeContests[i].Histogram.ToImage().Save(hisa);
                    scb.ShapeContests[j].Histogram.ToImage().Save(hisb);
                }
            }
            img.Save(Path.Combine(path, String.Format("{0}-{1}-{2}.bmp", fa, fb, c)));
        }
Beispiel #52
0
        private static void quantizeSC()
        {
            MyTimer timer = new MyTimer();
            int s = 100, K = 100, m = 180;
            string[] templatefiles = Directory.GetFiles(@"D:\Play Data\my_template_data\sc\", "*.sc")
                .Skip(0).Take(1000).ToArray();
            int templatecount = templatefiles.Length;

            #region 打开Shapeme
            Debug("打开{0}个Shapeme.", K);
            timer.Restart();
            double[][] shapemes = new double[K][];
            using (var fs = new FileStream(Path.Combine(@"D:\Play Data\my_template_data\sm-" + K, m + ".sm"), FileMode.Open)) {
                using (var br = new BinaryReader(fs)) {
                    for (int i = 0; i < K; ++i) {
                        shapemes[i] = new double[60];
                        for (int k = 0; k < 60; ++k) {
                            shapemes[i][k] = br.ReadDouble();
                        }
                    }
                }
            }
            Debug("Shapeme读取完成,用时{0}ms.", timer.Stop());
            #endregion

            #region 读取模板和量化
            Debug("对{0}个模板进行量化--------------------------------------------", templatecount);
            timer.Restart();
            for (int f = 0; f < templatecount; ++f) {
                string file = templatefiles[f];
                string filename = Path.GetFileNameWithoutExtension(file);

                int[] histogram = new int[K];
                using (var fs = new FileStream(file, FileMode.Open)) {
                    using (var br = new BinaryReader(fs)) {
                        for (int j = 0; j < s; ++j) {
                            double[] sc = new double[60];
                            for (int k = 0; k < 60; ++k) {
                                sc[k] = br.ReadDouble();
                            }

                            double[] dists = new double[K];
                            for (int k = 0; k < K; ++k)
                                dists[k] = Jim.OCR.ShapeContext2D.ShapeContext.HistCost(sc, shapemes[k]);
                            int id = dists.Select((v, idx) => new ValueIndexPair<double> { Value = v, Index = idx })
                                          .OrderBy(p => p.Value)
                                          .First().Index;
                            ++histogram[id];
                        }
                    }
                }
                using (var fs = new FileStream(Path.Combine(@"D:\Play Data\my_template_data\scq-" + K + "-" + m, filename + ".scq"), FileMode.Create)) {
                    using (var bw = new BinaryWriter(fs)) {
                        for (int i = 0; i < K; ++i) {
                            bw.Write(histogram[i]);
                        }
                    }
                }

                if (f % 100 == 0)
                    Debug("已完成{0}个", f);
            }
            Debug("量化完成,用时{0}ms.", timer.Stop());
            #endregion
        }
Beispiel #53
0
        public Steward(Mobile owner)
            : base(AIType.AI_Use_Default, FightMode.None, 1, 1, 0.2, 0.2)
        {
            mOwner = owner;
            mKeyword = "";
            mPlayers = new List<PlayerMobile>();
            myTimer = new MyTimer(this);
            myTimer.Start();
            Female = owner.Female;
            Race = owner.Race;
            Name = "Steward";
            Title = "";
            NameHue = 1150;

            SetBody();

            CantWalk = true;
            Direction = Direction.South;
            Blessed = true;
            if (Backpack == null) EquipItem(new StewardBackpack(this));
        }