1
00:00:07,170 --> 00:00:12,020
You guys this is Caleb with Dev slopes and in this video we're going to set up an instance of a speech

2
00:00:12,020 --> 00:00:15,750
synthesizer to speak what we see in our images.

3
00:00:15,740 --> 00:00:17,010
It's going to be really cool.

4
00:00:17,120 --> 00:00:22,490
And when I initially thought of this idea I thought of it as a way to be kind of like an assistive technology

5
00:00:22,910 --> 00:00:25,070
perhaps to those who are vision impaired.

6
00:00:25,070 --> 00:00:29,990
If they if they can't see what is in front of them they could use our app to scan things and it could

7
00:00:29,990 --> 00:00:34,340
speak it to them so they could hear what they're seeing so kind of like they can see with their ears

8
00:00:34,610 --> 00:00:35,440
supercool.

9
00:00:35,780 --> 00:00:39,590
And actually to use Avie speech synthesizer is not very difficult.

10
00:00:39,830 --> 00:00:45,020
So I just want to show you how to use it and how I use that in this app so pull open that X code project

11
00:00:45,410 --> 00:00:51,890
and let's go ahead and let's begin by actually creating an instance of a speech synthesizer.

12
00:00:51,890 --> 00:00:56,640
So go ahead and type var speech synthesizer.

13
00:00:57,350 --> 00:01:03,410
And that's going to be of type Avie speech synthesizer can instantiate it.

14
00:01:03,410 --> 00:01:04,640
And that's that.

15
00:01:04,640 --> 00:01:09,320
Now if you look deeply inside of this you'll notice that this comes from A-V foundation.

16
00:01:09,320 --> 00:01:13,950
So we've already integrated A-V foundation to capture our photo.

17
00:01:14,060 --> 00:01:20,270
But the part of A-V stands for audio and that's where our Avies speech synthesizer will come into play.

18
00:01:20,270 --> 00:01:28,160
OK now what we do need to do for this to work is we need to set the speech synthesisers delegate to

19
00:01:28,160 --> 00:01:30,040
be this view controller.

20
00:01:30,230 --> 00:01:35,380
So go ahead and type speech synthesizer dot delegate and that equals self.

21
00:01:35,390 --> 00:01:41,830
Now if we try to build and run this there is an error cannot assign value of type camera AVC to A-V

22
00:01:41,840 --> 00:01:44,300
speech synthesizer delegate.

23
00:01:44,300 --> 00:01:51,220
Now to fix that we're going to create an extension of A-V speech synthesizer delegate.

24
00:01:51,340 --> 00:01:55,690
That's going to give us the ability to call some important delegate methods that we need.

25
00:01:55,730 --> 00:01:59,560
So go ahead and type extension camera AVC.

26
00:01:59,780 --> 00:02:03,550
And we're going to do Avies speech synthesizer delegate.

27
00:02:03,950 --> 00:02:04,340
OK.

28
00:02:04,430 --> 00:02:09,980
And the function we're going to call is called did finish utterance and we'll talk about that in a second.

29
00:02:09,980 --> 00:02:18,050
So just go ahead and add that function and code to finish utterance We'll come back to that in a second.

30
00:02:18,050 --> 00:02:21,080
But for now if we go back up to view.

31
00:02:21,170 --> 00:02:26,540
Whereas that view did appear you can see that air went away because now we are conforming to speech

32
00:02:26,540 --> 00:02:27,640
synthesizer delegate.

33
00:02:27,710 --> 00:02:28,710
That's all we need.

34
00:02:29,120 --> 00:02:37,970
So in order to actually speak something we need to be able to create a speech utterance to get an AB

35
00:02:37,970 --> 00:02:40,070
speech utterance to actually speak.

36
00:02:40,070 --> 00:02:41,960
We need to pass it a string.

37
00:02:41,960 --> 00:02:47,510
So we're going to create a function that basically allows us to pass a string into an avi speech utterance

38
00:02:47,540 --> 00:02:50,060
and then use our synthesizer to speak it.

39
00:02:50,060 --> 00:02:59,890
So go ahead and type phunk synthesize speech speech from string and we're gonna use an internal parameter

40
00:02:59,890 --> 00:03:01,770
they're called string.

41
00:03:02,140 --> 00:03:04,210
Of course of type string.

42
00:03:04,900 --> 00:03:10,570
And basically what we're going to do is we'll create an instance of Avies speech utterance we'll pass

43
00:03:10,570 --> 00:03:15,180
it the string and then we will ask our synthesizer to speak the utterance.

44
00:03:15,190 --> 00:03:21,270
So go ahead and type let speech utterance equals Avies speech utterance.

45
00:03:21,760 --> 00:03:25,360
And we're going to pass a string K and that's what it's going to speak.

46
00:03:25,360 --> 00:03:28,960
Now of course this is the string we're passing in.

47
00:03:28,960 --> 00:03:34,340
So go ahead and type string and it can be that lowercase string from the internal parameter.

48
00:03:34,810 --> 00:03:42,110
OK so then now that we have that utterance we can call our synthesizer K speech synthesizer speak.

49
00:03:42,130 --> 00:03:50,800
And you'll notice it asks for an example of A-V speech utterance and we have that speech whoops speech

50
00:03:51,220 --> 00:03:52,420
utterance.

51
00:03:52,420 --> 00:03:53,650
OK that's what we need to pass it.

52
00:03:53,640 --> 00:03:59,830
Now this function for any string we pass in it will speak it k.

53
00:03:59,860 --> 00:04:05,470
That's the cool thing of Avies speech synthesizer any string we pass in it's going to speak for us.

54
00:04:05,470 --> 00:04:13,720
So we need to determine when we should speak this and that is basically when we classify our results.

55
00:04:13,750 --> 00:04:18,940
So when we pull through all of our classifications if it comes to something that it has no idea what

56
00:04:18,940 --> 00:04:21,770
it is if it's not sure we should speak that.

57
00:04:21,880 --> 00:04:22,570
OK.

58
00:04:22,930 --> 00:04:27,430
Now what we're going to do is we're actually going to take this string and I'm going to go ahead and

59
00:04:27,430 --> 00:04:29,260
copy it and delete it.

60
00:04:29,530 --> 00:04:35,430
And we're going to call this let unknown object message.

61
00:04:35,830 --> 00:04:37,830
And that's what we're going to use here.

62
00:04:37,840 --> 00:04:40,040
Unknown object message.

63
00:04:40,150 --> 00:04:44,530
We're going to also use that in our synthesise speech function.

64
00:04:44,530 --> 00:04:49,330
So go ahead and call a synthesized speech from string and we're going to give it our unknown object

65
00:04:49,330 --> 00:04:50,120
message.

66
00:04:50,140 --> 00:04:54,790
Now whenever we find something that we don't know what it is it's going to say I'm not sure what this

67
00:04:54,790 --> 00:04:55,060
is.

68
00:04:55,060 --> 00:04:56,370
Please try again.

69
00:04:56,410 --> 00:05:06,340
Very cool but we need to also create a string that's going to classify our object and give a level of

70
00:05:06,340 --> 00:05:07,300
confidence.

71
00:05:07,390 --> 00:05:13,330
So to do that I'm going to go ahead and I'm going to actually create some variables for this as well.

72
00:05:13,330 --> 00:05:23,910
So I'm going to cut this and just create var identification and let's go ahead and do var confidence.

73
00:05:24,010 --> 00:05:30,760
And we're going to actually take our confidence value here as well and let's go ahead and cut that out.

74
00:05:30,790 --> 00:05:31,970
Let's put it here.

75
00:05:32,110 --> 00:05:32,710
Cut that out.

76
00:05:32,710 --> 00:05:33,880
Confidence.

77
00:05:33,880 --> 00:05:34,540
All right cool.

78
00:05:34,660 --> 00:05:37,570
So we're going to pass in the confidence that we just created.

79
00:05:37,570 --> 00:05:41,540
We're going to give this the identification as a string.

80
00:05:41,740 --> 00:05:43,360
And so that looks good.

81
00:05:43,760 --> 00:05:46,690
OK let's go ahead and make sure those little warnings go away.

82
00:05:47,160 --> 00:05:47,810
Oh OK.

83
00:05:47,830 --> 00:05:49,000
They were never mutated.

84
00:05:49,090 --> 00:05:50,800
Let's just create them in two constants.

85
00:05:50,800 --> 00:05:52,510
Good call X code.

86
00:05:52,510 --> 00:05:54,330
Always looking out for me.

87
00:05:54,340 --> 00:05:54,790
Very cool.

88
00:05:54,800 --> 00:05:55,920
OK so that's good.

89
00:05:56,170 --> 00:06:02,890
But now we need to speak what it is that we saw so let's call synthesized speech and this string what

90
00:06:02,890 --> 00:06:10,510
we're going to do is we're going to compile both of these into a nice long sentence that makes sense

91
00:06:10,510 --> 00:06:12,210
that feels like natural language.

92
00:06:12,220 --> 00:06:16,850
So let's call this complete sentence.

93
00:06:17,230 --> 00:06:22,730
And we're going to basically say this looks like a.

94
00:06:23,530 --> 00:06:27,100
And we're going to pass in the identifier or sorry the identification.

95
00:06:27,100 --> 00:06:28,770
This looks like a fish.

96
00:06:28,780 --> 00:06:31,540
This looks like a remote.

97
00:06:31,570 --> 00:06:32,830
And I'm

98
00:06:35,530 --> 00:06:38,230
and here's where we pass in our confidence.

99
00:06:38,610 --> 00:06:38,940
OK.

100
00:06:38,960 --> 00:06:41,660
I'm blank per cent sure.

101
00:06:41,680 --> 00:06:48,070
So for an example this could be this looks like a remote control and I'm 98 percent sure.

102
00:06:48,220 --> 00:06:49,320
Pretty cool.

103
00:06:49,320 --> 00:06:54,740
Now we're going to synthesize that complete sentence so that it speaks that outloud and.

104
00:06:55,000 --> 00:06:55,690
Yeah.

105
00:06:55,780 --> 00:06:56,880
So this should work.

106
00:06:56,890 --> 00:06:59,350
This should synthesize our speech.

107
00:06:59,830 --> 00:07:05,080
If we go inside Avies speech synthesizer if you look inside of it you can see it has a delegate it has

108
00:07:05,080 --> 00:07:10,540
all kinds of booleans to check to see whether or not it's speaking if it's paused it has some functions

109
00:07:10,540 --> 00:07:11,470
to speak.

110
00:07:11,710 --> 00:07:15,340
And I should have shown you that earlier but I didn't.

111
00:07:15,340 --> 00:07:20,840
You can look inside here and you can see all of the cool things that A-V speech synthesizer and Avies

112
00:07:20,840 --> 00:07:22,150
speech utterance can do.

113
00:07:22,150 --> 00:07:24,450
You can even change the voice which is kind of cool.

114
00:07:24,460 --> 00:07:27,840
There's a system default but you could turn it into a different voice.

115
00:07:28,000 --> 00:07:32,680
And we can play around with that later but for now let's go ahead and build and run this let's see if

116
00:07:32,710 --> 00:07:33,590
it works.

117
00:07:37,810 --> 00:07:40,260
OK let's pull open quick time here.

118
00:07:40,460 --> 00:07:43,030
Time using two is what I'm using to record my screen.

119
00:07:43,070 --> 00:07:47,960
If you don't know you can go into quick time and you can actually choose your iPhone as an input camera

120
00:07:47,960 --> 00:07:48,970
which is very cool.

121
00:07:49,220 --> 00:07:59,610
So anyway let's go ahead and let's tap on the screen K so it looks like it's showing the day looks like

122
00:07:59,610 --> 00:08:08,220
it's showing everything but it doesn't appear that it's speaking let's see oh you know what I bet.

123
00:08:08,230 --> 00:08:09,620
Wait let me try to turn up.

124
00:08:10,110 --> 00:08:10,830
Whoa.

125
00:08:11,700 --> 00:08:14,110
Cause that's that's broadcasting my microphone.

126
00:08:14,330 --> 00:08:19,350
Let me try to set the microphone of this recording to be my iPhone.

127
00:08:19,580 --> 00:08:26,110
And then when I take a picture we should be able to hear it now.

128
00:08:27,290 --> 00:08:28,320
Did you hear that.

129
00:08:28,340 --> 00:08:31,890
That's what we're that's what we just said let's do it again.

130
00:08:32,010 --> 00:08:34,420
All right.

131
00:08:34,700 --> 00:08:38,420
And did you guys hear the camera shutter sound as well that's in there we just couldn't hear it because

132
00:08:38,420 --> 00:08:40,430
I didn't have the sound patched through correctly.

133
00:08:40,430 --> 00:08:45,200
All right let's let's try with something that he doesn't know.

134
00:08:45,420 --> 00:08:47,020
It's so cool.

135
00:08:47,360 --> 00:08:50,760
Let's see maybe I can try it with.

136
00:08:50,960 --> 00:08:52,580
Let's try it with some sunglasses.

137
00:08:52,580 --> 00:08:53,520
Here we go.

138
00:08:54,040 --> 00:08:54,690
Let's see.

139
00:08:57,340 --> 00:08:58,910
I'm not sure why this is.

140
00:08:58,930 --> 00:08:59,920
Please try again.

141
00:08:59,930 --> 00:09:00,370
See

142
00:09:03,250 --> 00:09:06,290
oh oh see.

143
00:09:06,440 --> 00:09:09,290
And one thing to remember guys is this is not an exact science.

144
00:09:09,290 --> 00:09:14,420
It's not absolutely perfect because it's not going to be able to identify every object it's only going

145
00:09:14,420 --> 00:09:17,100
to be able to go off of what it knows and what it understands.

146
00:09:17,150 --> 00:09:21,530
But sometimes you can see what why it made the association it did.

147
00:09:21,530 --> 00:09:23,160
It said this was a jeweler's loop.

148
00:09:23,270 --> 00:09:29,330
And if you think about it a jeweler's loop is a circular device with a circular piece of glass and a

149
00:09:29,330 --> 00:09:33,340
kind of a lens looking thing so it makes sense why it thinks certain things at time.

150
00:09:33,350 --> 00:09:36,780
Let's try this again.

151
00:09:42,350 --> 00:09:43,150
All right cool.

152
00:09:43,160 --> 00:09:46,190
So as you can see it can identify things it's not perfect.

153
00:09:46,190 --> 00:09:51,500
It has its issues but a lot of things that can identify properly which is just so cool.

154
00:09:51,500 --> 00:09:57,280
We have an app that can identify it can speak to us it can do all these amazing things.

155
00:09:57,320 --> 00:09:57,610
All right.

156
00:09:57,620 --> 00:10:01,790
So really cool this this works we can tap it

157
00:10:05,030 --> 00:10:06,680
and it speaks to us which is very cool.

158
00:10:06,680 --> 00:10:12,740
But the issue is right now I can tap on the screen 10 times and it's going to speak 10 times of what

159
00:10:12,740 --> 00:10:14,270
I saw and when I took photos of.

160
00:10:14,270 --> 00:10:20,160
So I think that we should add a little activity spinner on this image to show that it's loading and

161
00:10:20,160 --> 00:10:20,880
it's speaking.

162
00:10:20,900 --> 00:10:26,600
And we should basically disable the tap gesture recognizer while it's speaking.

163
00:10:26,720 --> 00:10:27,230
OK.

164
00:10:27,290 --> 00:10:28,760
It's really easy to set this up.

165
00:10:28,760 --> 00:10:33,410
But first we need to go ahead and add a UI activity indicator.

166
00:10:33,410 --> 00:10:39,080
So go ahead and type UI activity indicator view and of course we're in mind that storyboard we're going

167
00:10:39,080 --> 00:10:43,590
to drag that on and center it right there on our image view.

168
00:10:43,700 --> 00:10:50,690
We're going to set it to be white and we're going to pin it in the exact center of this container which

169
00:10:50,750 --> 00:10:51,460
of course.

170
00:10:51,500 --> 00:10:52,550
Oh you know what.

171
00:10:52,640 --> 00:10:53,970
No that is not what we want.

172
00:10:53,990 --> 00:10:59,930
We want to select the image view then the activity indicator and we want to give them the same horizontal

173
00:10:59,930 --> 00:11:01,510
and vertical center.

174
00:11:01,550 --> 00:11:02,000
OK.

175
00:11:02,180 --> 00:11:03,200
Just like that.

176
00:11:03,500 --> 00:11:07,620
And you know what we're going to actually set this to be hidden from the get go.

177
00:11:07,820 --> 00:11:10,460
So you can actually just do that right in Interface Builder.

178
00:11:10,700 --> 00:11:16,850
We don't need to do that in code or anything but what we do need to do is we need to add an IB action

179
00:11:17,030 --> 00:11:24,160
or rather an outlet so that we can modify this we can show it we can animate it et cetera et cetera.

180
00:11:24,170 --> 00:11:29,690
So in Interface Builder go ahead and open up the assistant editor and if it's not already there go ahead

181
00:11:29,690 --> 00:11:34,950
and click automatic and it should load the proper view controller and that looks good.

182
00:11:35,000 --> 00:11:37,550
When to close those get out of my way.

183
00:11:37,610 --> 00:11:38,150
Perfect.

184
00:11:38,150 --> 00:11:38,440
OK.

185
00:11:38,450 --> 00:11:41,160
So go ahead and right click.

186
00:11:41,720 --> 00:11:48,590
Right click from the activity indicator and go ahead and drag over to your other outlets which are down

187
00:11:48,590 --> 00:11:54,300
here for me and I'm just going to call this the spinner because that's basically what it is is a spinner.

188
00:11:54,530 --> 00:12:00,550
Now go ahead and go back to your code file and just make sure we can get.

189
00:12:00,560 --> 00:12:01,850
We have our spinner.

190
00:12:01,850 --> 00:12:02,780
That's awesome.

191
00:12:03,050 --> 00:12:11,300
And now what we need to do is we need to basically change so that whenever we tap the camera view it's

192
00:12:11,300 --> 00:12:13,530
going to go ahead and show the spinner.

193
00:12:13,790 --> 00:12:20,720
It's going to go ahead and pause out the tap gesture recognizer so that input cannot be sent in anymore.

194
00:12:20,990 --> 00:12:28,390
And then it's basically going to hide and re-enable the tap gesture recognizer as soon as it's done.

195
00:12:28,400 --> 00:12:32,420
And know what we also added this function did finish utterance.

196
00:12:32,420 --> 00:12:35,520
That's where we can re-enable everything which is perfect.

197
00:12:35,540 --> 00:12:43,340
So go ahead and actually up here at the top when we call did tap camera view here's what we're going

198
00:12:43,340 --> 00:12:43,730
to do.

199
00:12:43,730 --> 00:12:51,050
We're going to call self camera view is user interaction and enable set to false because when we tap

200
00:12:51,050 --> 00:12:54,550
it we should disable it from showing anything really.

201
00:12:54,680 --> 00:12:55,800
That is what we're going to do.

202
00:12:55,970 --> 00:13:04,160
So go ahead and type that and yeah we just disable the camera view from being tapped while it is capturing

203
00:13:04,850 --> 00:13:08,180
the photo sending it to our model et cetera et cetera.

204
00:13:08,210 --> 00:13:11,950
So we just set it up so that the user interaction is disabled.

205
00:13:12,020 --> 00:13:16,520
And now we're going to also unhide our spinner and we're going to started animating because when we

206
00:13:16,520 --> 00:13:19,150
tap on the camera view that's basically when everything starts floating.

207
00:13:19,150 --> 00:13:25,790
So go ahead and type self whip's self-taught spinner is hidden because remember we hit it in the interface

208
00:13:25,790 --> 00:13:31,140
builder that's going to be equal to false and then we're going to go ahead and type self that spinner

209
00:13:31,160 --> 00:13:35,330
don't start animating.

210
00:13:35,330 --> 00:13:39,690
That's right because that's going to start it actually doing its spin animation.

211
00:13:40,130 --> 00:13:44,150
OK so cool so our camera views disabled our spinner is animating.

212
00:13:44,150 --> 00:13:49,190
Now we need to think about when we want to re-enable the camera view and hide the spinner.

213
00:13:49,310 --> 00:13:51,290
And that is when it's done speaking.

214
00:13:51,350 --> 00:13:52,010
OK.

215
00:13:52,250 --> 00:13:59,030
So we already added this delegate method did finish utterance and that is used to determine when the

216
00:13:59,090 --> 00:14:01,520
speech synthesizer is finished talking.

217
00:14:01,520 --> 00:14:03,050
So that's super easy.

218
00:14:03,050 --> 00:14:05,900
All we need to do is basically do the opposite of what we just did.

219
00:14:05,900 --> 00:14:11,620
So self camera view is user interaction enabled is true.

220
00:14:11,660 --> 00:14:13,980
Now it can be tapped again.

221
00:14:14,030 --> 00:14:19,160
Let's go ahead and call self-caused spinnerbait is hidden equals true.

222
00:14:19,190 --> 00:14:19,830
OK.

223
00:14:20,570 --> 00:14:21,260
That's very cool.

224
00:14:21,260 --> 00:14:23,300
That's all we need to do is to hide our spinner.

225
00:14:23,540 --> 00:14:25,550
Oh you know what we should also stop it from animating

226
00:14:29,430 --> 00:14:30,450
OK.

227
00:14:30,480 --> 00:14:35,750
So now when it's done speaking it's going to go ahead and re-enable the camera view.

228
00:14:35,820 --> 00:14:38,410
It's going to hide the spinner and stop it from animating.

229
00:14:38,520 --> 00:14:41,010
Let's build and run and let's double check to make sure that works.

230
00:14:41,010 --> 00:14:46,500
This is just the way that we prevent the app from having too much input which could cause crashes it

231
00:14:46,500 --> 00:14:51,750
could cause memory issues and there's really no need to scan 100 things like right at once.

232
00:14:51,750 --> 00:14:57,240
So let's let's tap the screen and you'll hear the camera shutters sound and when I tap on the screen

233
00:14:57,240 --> 00:14:59,670
you shouldn't hear it again until it's done.

234
00:14:59,790 --> 00:15:03,330
We should also see the spin or show up although I see right now that it's not actually hidden.

235
00:15:03,330 --> 00:15:04,430
So we're going to need to fix that.

236
00:15:04,440 --> 00:15:05,380
But let's try it.

237
00:15:07,720 --> 00:15:08,790
Can tapping the screen.

238
00:15:08,790 --> 00:15:10,740
Nothing's happening.

239
00:15:11,180 --> 00:15:14,680
OK it's done it head when I tap it again.

240
00:15:14,870 --> 00:15:18,170
Ok cool.

241
00:15:18,530 --> 00:15:19,040
Very cool.

242
00:15:19,040 --> 00:15:20,010
So that works.

243
00:15:20,010 --> 00:15:26,760
But let's go let's go determine why it's not hidden from the get go.

244
00:15:26,810 --> 00:15:31,830
Maybe I put the wrong thing in the camera view is hidden.

245
00:15:31,850 --> 00:15:36,270
Oh did tap camera view is hidden is supposed to.

246
00:15:36,410 --> 00:15:38,970
Oh wait no it's it's supposed to show when I tap the camera view.

247
00:15:40,290 --> 00:15:41,660
Is hidden it's true.

248
00:15:42,680 --> 00:15:45,870
And let's go to the main story board I did hide that right.

249
00:15:46,920 --> 00:15:49,930
OK yeah it says it's hidden.

250
00:15:50,510 --> 00:15:54,170
Well I guess you know what let's go let's go hide it in code.

251
00:15:54,170 --> 00:15:59,060
Sometimes you can't rely on interface builder so let's go ahead and type spinner that is hidden.

252
00:15:59,060 --> 00:16:00,180
And let's set that to true.

253
00:16:00,200 --> 00:16:01,490
Let's build it again.

254
00:16:01,500 --> 00:16:05,840
Let's make sure that the spinner is actually hidden when we first load the app there's no use in having

255
00:16:05,840 --> 00:16:07,850
a spinner doing nothing.

256
00:16:07,970 --> 00:16:09,590
It's kind of confusing actually.

257
00:16:09,590 --> 00:16:10,310
OK good.

258
00:16:10,310 --> 00:16:10,990
So it's gone.

259
00:16:11,000 --> 00:16:13,420
Let's go ahead and tap the screen.

260
00:16:13,730 --> 00:16:17,210
Let's tap tap tap tap tap tap tap nothing.

261
00:16:18,840 --> 00:16:19,440
Cool.

262
00:16:19,660 --> 00:16:26,080
So when it's done I was able to tap into it again.

263
00:16:27,920 --> 00:16:28,310
OK.

264
00:16:28,360 --> 00:16:30,580
Pretty confident yourself there Siri.

265
00:16:30,580 --> 00:16:36,430
Anyway awesome so we just added some code to make sure that too much input is not getting in to our

266
00:16:36,430 --> 00:16:36,870
app.

267
00:16:37,030 --> 00:16:38,520
But guys this is incredible.

268
00:16:38,530 --> 00:16:44,620
Our app is done we've just built an app using machine learning that uses a pre-trained model to identify

269
00:16:44,620 --> 00:16:45,790
objects.

270
00:16:45,790 --> 00:16:51,190
Show what they are on the screen and speak to us what they are it's pretty amazing if you think about

271
00:16:51,190 --> 00:16:53,140
the technology that this is utilizing.

272
00:16:53,140 --> 00:16:55,830
Thank you guys so much for going through this section of the course.

273
00:16:55,840 --> 00:16:59,700
I hope this is what your appetite for core M-L and all the things it can do.

274
00:16:59,830 --> 00:17:03,160
There are so many ways you could extend this app to make it more amazing.

275
00:17:03,280 --> 00:17:08,980
You could use this as a way to tag and classify photos to make different albums you could use this as

276
00:17:08,980 --> 00:17:11,130
a way to catalog some of your stuff.

277
00:17:11,140 --> 00:17:17,280
I have a remote control I have some sunglasses I have this thing you can use it to catalog your stuff.

278
00:17:17,290 --> 00:17:22,000
There are lots of different ways that you could extend this app to make it more amazing.

279
00:17:22,000 --> 00:17:25,170
Now this is just one core M-L model squeezed net.

280
00:17:25,210 --> 00:17:26,390
The one that we're using.

281
00:17:26,530 --> 00:17:27,370
There are other ones.

282
00:17:27,370 --> 00:17:35,410
There's one a one from one called Places 2 0 5 Google net I think and it's utilized to identify scenes

283
00:17:35,410 --> 00:17:39,700
and places to tell you what kind of a senior at are you in a city or you at the beach or you in the

284
00:17:39,700 --> 00:17:40,600
forest.

285
00:17:40,600 --> 00:17:46,270
That's just another cool type of Corum that you can use the most amazing thing is all of this is happening

286
00:17:46,360 --> 00:17:47,170
on your device.

287
00:17:47,170 --> 00:17:50,460
Locally we don't even need to reach out to an API or a server.

288
00:17:50,530 --> 00:17:52,170
So so cool.

289
00:17:52,420 --> 00:17:54,040
Thank you guys so much great work.

290
00:17:54,040 --> 00:17:56,260
And let's head over to the next section of this course.

